x86 Instruction help: MOV [edx], eax

Chuck picture Chuck · Dec 24, 2012 · Viewed 19.1k times · Source

I'm reading through a book that is describing C linked lists and how they are represented within x86 ASM. I having difficulty understanding the instruction MOV [edx], eax.

If the instruction was reversed, MOV eax, [edx], I would understand it to mean copy the 4 bytes represented by the memory address stored in edx and store it in eax.

What does MOV [edx], eax represent?

If using the [] with the MOV instruction, I thought it meant to copy the data residing at the memory address to it's destination. If that is true, how can you copy whatever is in eax to a data value in edx?

Answer

nrz picture nrz · Dec 24, 2012

It's Intel assembly syntax. In Intel assembly syntax the destination is always the first operand, the rest operands are source operands. The other commonly used assembly syntax for x86 is AT&T, but as Intel and AT&T syntaxes look very different, they are easy to distinguish.

mov [edx],eax stores the value of eax in memory, to the address given in edx (in little-endian byte order).

mov eax,[edx] does exactly the reverse, reads a value stored from the memory, from the address given in edx, and stores it in eax.

[reg] always means indirect addressing, it's just like a pointer *reg in C.

To copy the contents of eax to edx, all you need is mov edx,eax. Destination is first operand, source is the second operand.