x86 Instruction help: MOV [edx], eax

11
我正在阅读一本介绍C语言链表以及如何在x86 ASM中表示它们的书。我对指令MOV [edx], eax难以理解。
如果指令被反转:MOV eax, [edx],那么我的理解是将存储在edx中的内存地址所代表的4个字节复制到eax中。
那么,MOV [edx], eax的意思是什么呢?
如果使用[]MOV指令,则我认为它的意思是将存储在内存地址中的数据复制到其目标位置。如果这是正确的,请问如何将eax中的任何内容复制到edx中的数据值中呢?

1
简单回答,使用C语言编写等效代码:*((DWORD*)EDX)=EAX; - Ira Baxter
2
@chuck - 它的工作方式完全相同,只是方向不同。 - Bo Persson
1个回答

20
这是Intel汇编语法。在Intel汇编语法中,目的地始终是第一个操作数,其余操作数都是源操作数。x86另一种常用的汇编语法是AT&T,但由于Intel和AT&T语法看起来非常不同,因此它们很容易区分。 mov [edx],eaxeax的值存储到内存中,在给定的edx地址(按little-endian字节顺序)。 mov eax,[edx]完全相反,从给定的edx地址读取存储在内存中的值,并将其存储在eax中。 [reg]始终表示间接寻址,就像C语言中的指针*reg
要将eax的内容复制到edx中,您只需要使用mov edx,eax。目标是第一个操作数,源是第二个操作数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接