Assembly 汇编寻址模式

Assembly 汇编寻址模式,assembly,x86,masm,masm32,addressing-mode,Assembly,X86,Masm,Masm32,Addressing Mode,有人能解释一下以下两者的区别吗?我发现理解寻址模式背后的概念有点困难 mov ax, [bx + di + 10] mov ax, [bx + di] + 10 非常感谢 假设bx=10,di=10 在案例1中 mov-ax,[30] 内存位置30处的值将复制到AX寄存器 在案例2中 mov ax,[20]+10 内存位置20处的值,比如X,加上10h,将被复制到AX寄存器。没有区别 您可以使用调试器进行检查 mov ax, [bx + di + 10] mov ax, [bx + di] +

有人能解释一下以下两者的区别吗?我发现理解寻址模式背后的概念有点困难

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

非常感谢

假设bx=10,di=10

在案例1中

mov-ax,[30]

内存位置30处的值将复制到AX寄存器

在案例2中

mov ax,[20]+10


内存位置20处的值,比如X,加上10h,将被复制到AX寄存器。

没有区别

您可以使用调试器进行检查

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。然后将最终值视为指针。取该地址所指向的
(2字节),并将该值分配给ax

mov ax, [bx+di]+10
不合法(16位寻址)。如果你要做:

mov ax, [ebx+edi]+10

这也是不允许的,因为
mov
不允许在
[ebx+edi]

之后进行额外的输入您确定
mov
指令可以进行添加吗?谢谢!因此,对于第二个变量,将10添加到
[bi+di]
的值中?对于第一个,复制值的位置偏移+10?是否正确?还有,mov ax,disp[bx][di]是什么意思?@alan-所有的意思都是一样的,添加两个寄存器和一个偏移量(disp)来获得地址。然后从该地址加载值。不要认为答案太糟糕,需要修改。他的例子使它在视觉上更具洞察力+1。