装配寻址模式

时间:2011-09-03 08:21:27

标签: assembly x86 masm masm32 addressing-mode

有人可以解释以下两者之间的区别是什么?我发现解决模式背后的概念有点难以理解

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

非常感谢!

3 个答案:

答案 0 :(得分:3)

没有区别!

您可以查看调试器...

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

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

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

答案 1 :(得分: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]不允许额外输入

答案 2 :(得分:-4)

假设bx = 10,di = 10。

案例1,

mov ax, [30]

存储单元30的值将被复制到AX寄存器

案例2,

mov ax, [20]+10

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