error A2070: invalid instruction operands
Solution 1:
For the most part, x86 instructions may use at most one memory operand. For a memory-memory move, use a temporary register:
mov [reg1], [reg2] # illegal
mov tmp, [reg2] # ok
mov [reg1], tmp
Solution 2:
mem, mem
is not a valid combination of operands. Use a register as an intermediate, e.g.:
mov eax,[edi]
mov [esi],eax
Alternatively, if you can swap esi
and edi
you could use movsd
:
movsd ; dword [edi] = dword [esi]; esi += 4; edi += 4
(Note: the += 4
is true assuming that the direction flag is clear. Otherwise it will be -= 4
. Shouldn't matter in your case since you pop
esi
and edi
immediatly afterwards).