[英]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.