temp = source source = dest dest = temp
The xchg instruction exchanges the source (second operand) to the destination. The destination and can be a 64, 32, 16 or 8 bit register or memory location. You can not use 2 memory addresses.
If either or both of the operands is a 32 bit register, the upper half of the register(s) will be zeroed.
xchg rax, r9 ; exchange rax and r9 xchg eax, edx ; exchange eax and edx ; places 0 into upper half of rax and rdx xchg dx, ax ; moves ax into dx ; leaves upper 3/4 of rax and rdx alone xchg rax, [y] ; exchanges rax and 64 bit variable y xchg [x], eax ; exchange eax and 32 bit variable x ; places 0 into upper half of rax ; does not modify memory after x+3