我正在阅读一本描述 C 链表以及它们如何在 x86 ASM 中表示的书。我很难理解指令MOV [edx], eax
。
如果指令颠倒过来,MOV eax, [edx]
我会理解为复制存储在 edx 中的内存地址所代表的 4 个字节,并将其存储在 eax 中。
MOV[edx], eax
代表什么?
如果使用[]
withMOV
指令,我认为这意味着将驻留在内存地址的数据复制到它的目的地。如果这是真的,你怎么能把里面的东西复制eax
到里面的数据值edx
?
这是英特尔汇编语法。在 Intel 汇编语法中,目标始终是第一个操作数,其余操作数是源操作数。x86 的另一种常用汇编语法是 AT&T,但由于 Intel 和 AT&T 语法看起来非常不同,因此它们很容易区分。
mov [edx],eax
将 的值eax
存储到内存中给定的地址edx
(以小端字节顺序)。
mov eax,[edx]
完全相反,从内存中读取存储的值,从给定的地址edx
,并将其存储在eax
.
[reg]
总是意味着间接寻址,就像*reg
C中的指针一样。
要复制eax
to的内容edx
,您只需要mov edx,eax
. 目标是第一个操作数,源是第二个操作数。