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).