操作碼 |
指令 |
說明 |
90+rw |
XCHG AX,16 |
交換 r16 與 AX |
90+rw |
XCHG r16, X |
交換 AX 與 r16 |
90+rd |
XCHG EAX, r32 |
交換 r32 與 EAX |
90+rd |
XCHG r32, EAX |
交換 EAX 與 r32 |
86 /r |
XCHG r/m8, r8 |
交換 r8(位元組暫存器)與 r/m8 中的位元組 |
86 /r |
XCHG r8, r/m8 |
交換 r/m8 中的位元組與 r8(位元組暫存器) |
87 /r |
XCHG r/m16, r16 |
交換 r16 與 r/m16 中的字 |
87 /r |
XCHG r16, r/m16 |
交換 r/m16 中的字與 r16 |
87 /r |
XCHG r/m32, r32 |
交換 r32 與 r/m32 中的雙字 |
87 /r |
XCHG r32, r/m32 |
交換 r/m32 中的雙字與 r32 |
交換目標(第一個)運算元與源(第二個)運算元的內容。運算元可以是兩個通用暫存器,也可以是暫存器與記憶體位置。如果引用記憶體運算元,則在執行交換操作期間,不論是否帶 LOCK 字首,也不論 IOPL 的值如何,都會自動實施處理器的鎖定協議。(如需有關鎖定協議的詳細資訊,請參閱本章中的 LOCK 字首說明)。
此指令對於實現程序同步中的訊號量或類似的數據結構非常有用。(如需有關匯流排鎖定的詳細資訊,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 3 卷第 7 章中的“匯流排鎖定”)。
對於 16 位運算元,XCHG 指令還可以用於代替 BSWAP 指令。
TEMP DEST
DEST SRC
SRC TEMP
無。
#GP(0) - 如果任何一個運算元位於不可寫的段。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS 或 GS 暫存器包含空的段選擇器。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在目前特權級別為 3 且啟用對齊檢查的情況下進行未對齊的記憶體引用。
#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS - 如果記憶體運算元有效地址超出 SS 段限制。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。