XCHG (Exchange) 指令以原子方式交換兩個操作數的值,無需暫存變量。在寄存器間交換時效能極高,也是實現無鎖演算法的基礎指令之一。
XCHG reg, reg { 寄存器交換,最快 }
XCHG reg, mem { 寄存器與內存交換,帶隱含 LOCK 前綴 }
XCHG mem, reg { 同上 }
{ 不支援:XCHG mem, mem }
var
x, y: Integer;
begin
x := 1; y := 9;
asm
mov eax, x
mov ecx, y
xchg eax, ecx { 至少一個操作數必須是寄存器 }
mov x, eax
mov y, ecx
end;
ShowMessage(Format('x=%d, y=%d', [x, y])); { x=9, y=1 }
end;
XCHG [mem], reg 隱含總線鎖定,可用於簡單自旋鎖XCHG AL, AH 交換 AX 高低位 (配合 ROL/ROR 實現 16/32 位字節序轉換)現代 CPU 對 XCHG reg, reg 執行極快 (1 週期);但 XCHG [mem], reg 因鎖定語義較慢 (20-50 週期),高頻場合優先使用寄存器交換或 CMPXCHG。