首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 內嵌組合語言教學 (27):XCHG 指令交換寄存器內容

     編輯:Delphi

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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved