Петли в сборке: TASM на 8086 (DosBox)
Я пытаюсь зациклить этот код, который записывает символ "Q" по адресу в сегменте видеопамяти b800, указанном в es:[di]
здесь я попытался увеличить цикл на два (поскольку каждая позиция экрана состоит из двух байтов, цвета и атрибута), но код создает символ только в первом месте. Я думаю, что я не понимаю, как использовать cx, потому что я думал, что это должно зацикливаться 100 раз.
.model small
.stack
.code
main:
sub cx, cx
mov cx, 100
dates:
mov ax,0B800h
mov es,ax
sub di, di
mov di, 200
add di, 2
mov ah, 5
mov al, 'Q'
mov es:[di], ax
loop dates
mov ax,4C00h
int 21h
end main
1 ответ
OMG, давно не занимался программированием на ассемблере, но есть некоторые очевидные ошибки:
начальный
sub cx,cx
устанавливает cx в 0, но это бесполезно, так как выmov cx,100
следующая строкаВы устанавливаете значения для
es
di
и т. д. новые для каждого цикла цикла, поэтому все итерации записываются в одно и то же место. Решение: перенести датыadd di,2
у вас нет правильного счетчика циклов, поэтому вы должны заменить
loop dates
с чем-то вроде
декабрь
JNZ даты