有人可以解释以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难
mov ax, [bx + di + 10]
mov ax, [bx + di] + 10
非常感谢!
有人可以解释以下两者之间的区别吗?我发现理解寻址模式背后的概念有点困难
mov ax, [bx + di + 10]
mov ax, [bx + di] + 10
非常感谢!
没有区别!
您可以使用调试器检查...
mov ax, [bx + di + 10]
mov ax, [bx + di] + 10
编译器会将船指令编译为:8B443B0A
因此,ax 应该从地址加载 16 位值:bx + di + 10
您标记了这个 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]
假设 bx=10 ,di = 10。
在案例 1 中,
mov ax, [30]
内存位置 30 的值将被复制到 AX 寄存器
在案例 2 中,
mov ax, [20]+10
内存位置 20 的值,比如说 X,加上 10h X+10h
,将被复制到 AX 寄存器。