操作碼 |
指令 |
說明 |
0F 47 /r |
CMOVA r16, r/m16 |
高於(CF=0 且 ZF=0)時移動 |
0F 47 /r |
CMOVA r32, r/m32 |
高於(CF=0 且 ZF=0)時移動 |
0F 43 /r |
CMOVAE r16, r/m16 |
高於或等於 (CF=0) 時移動 |
0F 43 /r |
CMOVAE r32, r/m32 |
高於或等於 (CF=0) 時移動 |
0F 42 /r |
CMOVB r16, r/m16 |
低於 (CF=1) 時移動 |
0F 42 /r |
CMOVB r32, r/m32 |
低於 (CF=1) 時移動 |
0F 46 /r |
CMOVBE r16, r/m16 |
低於或等於(CF=1 或 ZF=1)時移動 |
0F 46 /r |
CMOVBE r32, r/m32 |
低於或等於(CF=1 或 ZF=1)時移動 |
0F 42 /r |
CMOVC r16, r/m16 |
進位 (CF=1) 時移動 |
0F 42 /r |
CMOVC r32, r/m32 |
進位 (CF=1) 時移動 |
0F 44 /r |
CMOVE r16, r/m16 |
等於 (ZF=1) 時移動 |
0F 44 /r |
CMOVE r32, r/m32 |
等於 (ZF=1) 時移動 |
0F 4F /r |
CMOVG r16, r/m16 |
大於(ZF=0 且 SF=OF)時移動 |
0F 4F /r |
CMOVG r32, r/m32 |
大於(ZF=0 且 SF=OF)時移動 |
0F 4D /r |
CMOVGE r16, r/m16 |
大於或等於 (SF=OF) 時移動 |
0F 4D /r |
CMOVGE r32, r/m32 |
大於或等於 (SF=OF) 時移動 |
0F 4C /r |
CMOVL r16, r/m16 |
小於 (SF<>OF) 時移動 |
0F 4C /r |
CMOVL r32, r/m32 |
小於 (SF<>OF) 時移動 |
0F 4E /r |
CMOVLE r16, r/m16 |
小於或等於(ZF=1 或 SF<>OF)時移動 |
0F 4E /r |
CMOVLE r32, r/m32 |
小於或等於(ZF=1 或 SF<>OF)時移動 |
0F 46 /r |
CMOVNA r16, r/m16 |
不高於(CF=1 或 ZF=1)時移動 |
0F 46 /r |
CMOVNA r32, r/m32 |
不高於(CF=1 或 ZF=1)時移動 |
0F 42 /r |
CMOVNAE r16, r/m16 |
不高於或等於 (CF=1) 時移動 |
0F 42 /r |
CMOVNAE r32, r/m32 |
不高於或等於 (CF=1) 時移動 |
0F 43 /r |
CMOVNB r16, r/m16 |
不低於 (CF=0) 時移動 |
0F 43 /r |
CMOVNB r32, r/m32 |
不低於 (CF=0) 時移動 |
0F 47 /r |
CMOVNBE r16, r/m16 |
不低於或等於(CF=0 且 ZF=0)時移動 |
0F 47 /r |
CMOVNBE r32, r/m32 |
不低於或等於(CF=0 且 ZF=0)時移動 |
0F 43 /r |
CMOVNC r16, r/m16 |
無進位 (CF=0) 時移動 |
0F 43 /r |
CMOVNC r32, r/m32 |
無進位 (CF=0) 時移動 |
0F 45 /r |
CMOVNE r16, r/m16 |
不等於 (ZF=0) 時移動 |
0F 45 /r |
CMOVNE r32, r/m32 |
不等於 (ZF=0) 時移動 |
0F 4E /r |
CMOVNG r16, r/m16 |
不大於(ZF=1 或 SF<>OF)時移動 |
0F 4E /r |
CMOVNG r32, r/m32 |
不大於(ZF=1 或 SF<>OF)時移動 |
0F 4C /r |
CMOVNGE r16, r/m16 |
不大於或等於 (SF<>OF) 時移動 |
0F 4C /r |
CMOVNGE r32, r/m32 |
不大於或等於 (SF<>OF) 時移動 |
0F 4D /r |
CMOVNL r16, r/m16 |
不小於 (SF=OF) 時移動 |
0F 4D /r |
CMOVNL r32, r/m32 |
不小於 (SF=OF) 時移動 |
0F 4F /r |
CMOVNLE r16, r/m16 |
不小於或等於(ZF=0 且 SF=OF)時移動 |
0F 4F /r |
CMOVNLE r32, r/m32 |
不小於或等於(ZF=0 且 SF=OF)時移動 |
操作碼 |
指令 |
說明 |
0F 41 /r |
CMOVNO r16, r/m16 |
不上溢 (OF=0) 時移動 |
0F 41 /r |
CMOVNO r32, r/m32 |
不上溢 (OF=0) 時移動 |
0F 4B /r |
CMOVNP r16, r/m16 |
奇校驗 (PF=0) 時移動 |
0F 4B /r |
CMOVNP r32, r/m32 |
奇校驗 (PF=0) 時移動 |
0F 49 /r |
CMOVNS r16, r/m16 |
正數 (SF=0) 時移動 |
0F 49 /r |
CMOVNS r32, r/m32 |
正數 (SF=0) 時移動 |
0F 45 /r |
CMOVNZ r16, r/m16 |
不為零 (ZF=0) 時移動 |
0F 45 /r |
CMOVNZ r32, r/m32 |
不為零 (ZF=0) 時移動 |
0F 40 /r |
CMOVO r16, r/m16 |
上溢 (OF=0) 時移動 |
0F 40 /r |
CMOVO r32, r/m32 |
上溢 (OF=0) 時移動 |
0F 4A /r |
CMOVP r16, r/m16 |
偶校驗 (PF=1) 時移動 |
0F 4A /r |
CMOVP r32, r/m32 |
偶校驗 (PF=1) 時移動 |
0F 4A /r |
CMOVPE r16, r/m16 |
偶校驗 (PF=1) 時移動 |
0F 4A /r |
CMOVPE r32, r/m32 |
偶校驗 (PF=1) 時移動 |
0F 4B /r |
CMOVPO r16, r/m16 |
奇校驗 (PF=0) 時移動 |
0F 4B /r |
CMOVPO r32, r/m32 |
奇校驗 (PF=0) 時移動 |
0F 48 /r |
CMOVS r16, r/m16 |
負數 (SF=1) 時移動 |
0F 48 /r |
CMOVS r32, r/m32 |
負數 (SF=1) 時移動 |
0F 44 /r |
CMOVZ r16, r/m16 |
為零 (ZF=1) 時移動 |
0F 44 /r |
CMOVZ r32, r/m32 |
為零 (ZF=1) 時移動 |
CMOVcc 指令檢查 EFLAGS 暫存器中一個或多個狀態標誌(CF、OF、PF、SF 及 ZF)的狀態,如果標誌處於指定的狀態(或條件),則執行移動操作。條件程式碼 (cc) 與每條指令關聯,用於指明測試條件。如果條件不滿足,則不執行移動操作,而是繼續執行 CMOVcc 指令後面的指令。
這些指令可以將 16 位或 32 位值從記憶體移到通用暫存器,或是從一個通用暫存器移到另一個。不支援 8 位暫存器運算元的條件移動。
每個 CMOVcc 助記符的條件在上表的說明列中給出。術語“小於”與“大於”用於有符號整數的比較;術語“高於”與“低於”用於無符號整數。
由於狀態標誌的特定狀態有時存在兩種含義,因此給某些操作碼定義了兩個助記符。例如,CMOVA(高於時條件移動)指令與 CMOVNBE(不低於或等於時條件移動)指令是操作碼 0F 47H 的替代助記符。
CMOVcc 是奔騰(R) Pro 處理器系列的新增指令;不過,並非此係列的所有處理器都支援它們。軟體可以使用 CPUID 指令檢查處理器的功能資訊,以確定處理器是否支援 CMOVcc 指令(請參閱 COMISS - 比較標量有序單精度浮點值並設定 EFLAGS)。
temp DEST
IF condition TRUE
THEN
DEST SRC
ELSE
DEST temp
FI;
無。
#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) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。