有人可以解释以下两者之间的区别是什么?我发现解决模式背后的概念有点难以理解
mov ax, [bx + di + 10]
mov ax, [bx + di] + 10
非常感谢!
答案 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寄存器。