3

有人可以解释以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

非常感谢!

4

3 回答 3

3

没有区别!

您可以使用调试器检查...

mov ax, [bx + di + 10]
mov ax, [bx + di] + 10

编译器会将船指令编译为:8B443B0A

因此,ax 应该从地址加载 16 位值:bx + di + 10

于 2011-09-03T09:48:13.467 回答
3

您标记了这个 MASM32,但对于 x86,这两条指令都不合法。除非你正在做 16 位编程,在这种情况下你应该清楚。

mov ax, [bx+di+10]

在 x86 中是不合法的,因为它使用 16 位寻址。但是,以下是允许的:

mov ax, [ebx+edi+10]

这意味着取 ebx 的值,将其添加到 edi 的值,然后将 10 添加到该值。然后将最终值视为指针。取该word地址指向的(2 个字节)并将值分配给 ax。

mov ax, [bx+di]+10

同样不合法(16 位寻址)。如果你要这样做:

mov ax, [ebx+edi]+10

这也是不允许的,因为mov之后不允许额外输入[ebx+edi]

于 2011-09-03T09:59:20.890 回答
-4

假设 bx=10 ,di = 10。

在案例 1 中,

mov ax, [30]

内存位置 30 的值将被复制到 AX 寄存器

在案例 2 中,

mov ax, [20]+10

内存位置 20 的值,比如说 X,加上 10h X+10h,将被复制到 AX 寄存器。

于 2011-09-03T08:24:14.087 回答