Я изучаю язык ассемблера из книги "Искусство сборки x86", и у меня есть вопрос, на который я не смог придумать ответ.
программа выглядит так:
"в этом упражнении вы запустите запущенную программу, которая проверяет и оперирует значениями, найденными в памяти. Затем вы переключаетесь на экран памяти и изменяете значения в памяти (то есть вы получаете прямой доступ к памяти, пока программа продолжает работать).
программа начинается с установки ячейки памяти 1000h на ноль, затем она зацикливается до тех пор, пока не будет выполнено одно из двух условий - либо пользователь переключает переключатель FFF0, либо пользователь изменяет значение в ячейке памяти 1000h. Переключатель FFF0 завершает программу.
Изменение значения в ячейке памяти 1000h передает управление в раздел программы, который складывает n слов, где n - новое значение в ячейке памяти 1000h. "
После суммирования этих значений он печатает их сумму, используя «put»
У меня есть этот код:
d: mov cx,0
mov [1000],cx
a: mov cx,[1000]
cmp cx,0
jne c
mov ax,[fff0]
cmp ax,0
je a
halt
c: mov bx,1002
mov ax,0
b: add ax,[bx]
add bx,2
sub cx,1
cmp cx,0
jne b
put
jmp d
Проблема в том, что когда я ставлю значение 12h на 1000h, программа выводит 2 значения, сумму и число 1.
Когда я выполняю программу, она выводит 1 значение (сумму), но когда я запускаю ее, она выводит 2 значения (сумму и число 1).
Может кто-нибудь объяснить это поведение?