从寄存器和地址移动值

时间:2017-12-11 15:56:57

标签: assembly emu8086

我尝试在emu8086中解决无限循环,无法理解动作背后的逻辑。

 start:
     mov     di, ds:1234h
     mov     bx, [di]
     mov     ax, [bx]
     cmp     ax, 3
     jnz     short start

有人可以帮我理解所有记忆动作之间的逻辑吗?

1 个答案:

答案 0 :(得分:1)

让我们假设以下是寄存器和内存的内容:

DS存储0700

DS:1234h存储5

5存储2

2存储3

现在声明

mov di, ds:1234h

5转移到di。因为内存地址ds:1234h0700: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)。