操作碼 |
指令 |
說明 |
DA C0+i |
FCMOVB ST(0), ST(i) |
低於 (CF=1) 時移動 |
DA C8+i |
FCMOVE ST(0), ST(i) |
等於 (ZF=1) 時移動 |
DA D0+i |
FCMOVBE ST(0), ST(i) |
低於或等於(CF=1 或 ZF=1)時移動 |
DA D8+i |
FCMOVU ST(0), ST(i) |
無序 (PF=1) 時移動 |
DB C0+i |
FCMOVNB ST(0), ST(i) |
不低於 (CF=0) 時移動 |
DB C8+i |
FCMOVNE ST(0), ST(i) |
不等於 (ZF=0) 時移動 |
DB D0+i |
FCMOVNBE ST(0), ST(i) |
不低於或等於(CF=0 且 ZF=0)時移動 |
DB D8+i |
FCMOVNU ST(0), ST(i) |
有序 (PF=0) 時移動 |
測試 EFLAGS 暫存器中的狀態標誌,如果給定的測試條件為真,則將源運算元(第二個運算元)移到目標運算元(第一個運算元)。每個助記符的條件在上述的“說明”列中給出,在“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 1 卷的“表 6-4”中也有列出。源運算元總是位於 ST(i) 暫存器,目標運算元總是 ST(0)。
FCMOVcc 指令對於優化小型 IF 結構非常有用。此外,它們還有助於消除 IF 操作的分支開銷,以及處理器發生分支預測失誤的可能。
處理器可能不支援 FCMOVcc 指令。軟體可以使用 CPUID 指令檢查處理器的功能資訊,以檢查處理器是否支援 FCMOVcc 指令(請參閱本章中的 COMISS - 比較標量有序單精度浮點值並設定 EFLAGS)。如果 CMOV 與 FPU 功能位都有設定,則支援 FCMOVcc 指令。
FCMOVcc 指令在“英特爾(R) 體系結構”的奔騰(R) Pro 處理器系列中引入,早期的“英特爾(R) 體系結構”處理器不提供此指令。
IF condition TRUE
ST(0) ST(i)
FI;
C1 - 如果發生堆疊下溢,則設定為 0。
C0、C2、C3 - 未定義。
#IS - 發生堆疊下溢。
無。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。