FICOM/FICOMP - 比較整數

操作碼

指令

說明

DE /2

FICOM m16int

比較 ST(0) 與 m16int

DA /2

FICOM m32int

比較 ST(0) 與 m32int

DE /3

FICOMP m16int

比較 ST(0) 與 m16int,並彈出暫存器堆疊。

DA /3

FICOMP m32int

比較 ST(0) 與 m32int,並彈出暫存器堆疊。

說明

比較暫存器 ST(0) 中的值與整型源運算元,根據結果設定 FPU 狀態字中的條件程式碼標誌 C0、C2 及 C3(請參閱下表)。執行比較之前,整數值會轉換成擴充套件實數格式。

條件

C3

C2

C0

ST(0) > SRC

0

0

0

ST(0) < SRC

0

0

1

ST(0) SRC

1

0

0

無序

1

1

1

這些指令執行“無序比較”。無序比較還檢查比較的數值的類別(請參閱 FXAM - 檢查)。如果其中一個運算元是 NaN,或是未定義的格式,則條件標誌設定為“無序”。

忽略 0 的符號,因此 -0.0 +0.0。

比較之後,FICOMP 指令彈出暫存器堆疊。要彈出暫存器堆疊,處理器將 ST(0) 暫存器標記為空,並將堆疊指針 (TOP) 遞增 1。

操作

CASE (relation of operands) OF
ST(0) > SRC: C3, C2, C0 000;
ST(0) < SRC: C3, C2, C0 001;
ST(0) SRC: C3, C2, C0 100;
Unordered: C3, C2, C0 111;
ESAC;
IF instruction FICOMP
THEN
PopRegisterStack;
FI;

影響的 FPU 標誌

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

C0、C2、C3 - 請參閱上表。

浮點異常

#IS - 發生堆疊下溢。

#IA - 一個運算元是,或兩個運算元都是 NaN,或是採用不支援的格式。

#D - 一個運算元是,或兩個運算元都是非規格化值。

保護模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS 或 GS 暫存器包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

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

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在目前特權級別為 3 且啟用對齊檢查的情況下進行未對齊的記憶體引用。

實地址模式異常

#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS - 如果記憶體運算元有效地址超出 SS 段限制。

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

虛 8086 模式異常

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

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

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。