FCMOVcc - 浮點條件移動

操作碼

指令

說明

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 指令。

英特爾(R) 體系結構相容性

FCMOVcc 指令在“英特爾(R) 體系結構”的奔騰(R) Pro 處理器系列中引入,早期的“英特爾(R) 體系結構”處理器不提供此指令。

操作

IF condition TRUE
ST(0) ST(i)
FI;

影響的 FPU 標誌

C1 - 如果發生堆疊下溢,則設定為 0。

C0、C2、C3 - 未定義。

浮點異常

#IS - 發生堆疊下溢。

影響的整數標誌

無。

保護模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

實地址模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。

虛 8086 模式異常

#NM - 如果 CR0 中的 EM 或 TS 設定為 1。