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