繁体   English   中英

装配寻址模式

[英]Assembly Addressing Modes

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

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

非常感谢!

没有区别!

你可以查看调试器......

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

编译器会将boath指令编译为: 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

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

假设bx = 10,di = 10。

在案例1中,

mov ax, [30]

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

在案例2中,

mov ax, [20]+10

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM