我正在从“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)。
有人可以解释这种行为吗?