8

我正在阅读一本描述 C 链表以及它们如何在 x86 ASM 中表示的书。我很难理解指令MOV [edx], eax

如果指令颠倒过来,MOV eax, [edx]我会理解为复制存储在 edx 中的内存地址所代表的 4 个字节,并将其存储在 eax 中。

MOV[edx], eax代表什么?

如果使用[]withMOV指令,我认为这意味着将驻留在内存地址的数据复制到它的目的地。如果这是真的,你怎么能把里面的东西复制eax到里面的数据值edx

4

1 回答 1

17

这是英特尔汇编语法。在 Intel 汇编语法中,目标始终是第一个操作数,其余操作数是源操作数。x86 的另一种常用汇编语法是 AT&T,但由于 Intel 和 AT&T 语法看起来非常不同,因此它们很容易区分。

mov [edx],eax将 的值eax存储到内存中给定的地址edx(以小端字节顺序)。

mov eax,[edx]完全相反,从内存中读取存储的值,从给定的地址edx,并将其存储在eax.

[reg]总是意味着间接寻址,就像*regC中的指针一样。

要复制eaxto的内容edx,您只需要mov edx,eax. 目标是第一个操作数,源是第二个操作数。

于 2012-12-24T11:39:03.763 回答