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