# XADD
# Exchange and Add
Opcode | Mnemonic | Description |
---|---|---|
0F C0 /r | XADD r/m8, r8 | Exchange r8 and r/m8; load sum into r/m8. |
0F C1 /r | XADD r/m16, r16 | Exchange r16 and r/m16; load sum into r/m16. |
0F C1 /r | XADD r/m32, r32 | Exchange r32 and r/m32; load sum into r/m32. |
# Description
Exchanges the first operand (destination operand) with the second operand (source operand), then loads the sum of the two values into the destination operand. The destination operand can be a register or a memory location; the source operand is a register.
This instruction can be used with a LOCK prefix to allow the instruction to be executed atomically.
# Operation
Temporary = Source + Destination;
Source = Destination;
Destination = Temporary;
1
2
3
4
2
3
4
# Flags affected
The CF, PF, AF, SF, ZF, and OF flags are set according to the result of the addition, which is stored in the destination operand.
# IA-32 Architecture Compatibility
IA-32 processors earlier than the Intel486 processor do not recognize this instruction. If this instruction is used, you should provide an equivalent code sequence that runs on earlier processors.