操作碼 |
指令 |
說明 |
3C ib |
CMP AL, imm8 |
比較 imm8 與 AL |
3D iw |
CMP AX, imm16 |
比較 imm16 與 AX |
3D id |
CMP EAX, imm32 |
比較 imm32 與 EAX |
80 /7 ib |
CMP r/m8, imm8 |
比較 imm8 與 r/m8 |
81 /7 iw |
CMP r/m16, imm16 |
比較 imm16 與 r/m16 |
81 /7 id |
CMP r/m32,imm32 |
比較 imm32 與 r/m32 |
83 /7 ib |
CMP r/m16,imm8 |
比較 imm8 與 r/m16 |
83 /7 ib |
CMP r/m32,imm8 |
比較 imm8 與 r/m32 |
38 /r |
CMP r/m8,r8 |
比較 r8 與 r/m8 |
39 /r |
CMP r/m16,r16 |
比較 r16 與 r/m16 |
39 /r |
CMP r/m32,r32 |
比較 r32 與 r/m32 |
3A /r |
CMP r8,r/m8 |
比較 r/m8 與 r8 |
3B /r |
CMP r16,r/m16 |
比較 r/m16 與 r16 |
3B /r |
CMP r32,r/m32 |
比較 r/m32 與 r32 |
比較第一個源運算元與第二個源運算元,並根據結果設定 EFLAGS 暫存器中的狀態標誌。比較操作通過將第一個運算元減去第二個運算元來執行,然後按照與 SUB 指令相同的方式設定狀態標誌。將立即數用作運算元時,會按照符號擴充套件方式將它擴充套件到第一個運算元的長度。
CMP 指令通常與條件跳轉 (Jcc)、條件移動 (CMOVcc) 或 SETcc 指令配合使用。Jcc、CMOVcc 及 SETcc 指令使用的條件程式碼都基於 CMP 指令的結果。“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷附錄 B“EFLAGS 條件程式碼”顯示狀態標誌與條件程式碼之間的關係。
temp SRC1 - SignExtend(SRC2);
ModifyStatusFlags; (* Modify status flags in the same manner as the SUB instruction*)
CF、OF、SF、ZF、AF 及 PF 標誌根據結果設定。
#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) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。