我尝试在emu8086中解决无限循环,无法理解动作背后的逻辑。
start:
mov di, ds:1234h
mov bx, [di]
mov ax, [bx]
cmp ax, 3
jnz short start
有人可以帮我理解所有记忆动作之间的逻辑吗?
答案 0 :(得分:1)
让我们假设以下是寄存器和内存的内容:
DS
存储0700
DS:1234h
存储5
5
存储2
2
存储3
现在声明
mov di, ds:1234h
将5
转移到di
。因为内存地址ds:1234h
(0700:1234h
)存储5
声明
mov bx, [di]
将2
转移到bx
,因为5
指向的内存位置(di
)的数据会存储2
。
声明
mov ax, [bx]
将3
转移到ax
,因为2
指向的内存位置(di
)的数据会存储3
。
声明
cmp ax, 3
将设置零标记(因为在我们的例子中ax
的内容与3
匹配)
最后声明
jnz short start
如果零标志未设置为标签start
,则跳转(在我们的例子中,由于在前一个语句中设置了零标志,因此不会跳转)。 short
用于8位跳转(还有16位跳跃称为近跳跃,32位跳跃称为跳跃more on here)。