操作碼 |
指令 |
說明 |
D8 /2 |
FCOM m32real |
比較 ST(0) 與 m32real。 |
DC /2 |
FCOM m64real |
比較 ST(0) 與 m64real。 |
D8 D0+i |
FCOM ST(i) |
比較 ST(0) 與 ST(i)。 |
D8 D1 |
FCOM |
比較 ST(0) 與 ST(1)。 |
D8 /3 |
FCOMP m32real |
比較 ST(0) 與 m32real,並彈出暫存器堆疊。 |
DC /3 |
FCOMP m64real |
比較 ST(0) 與 m64real,並彈出暫存器堆疊。 |
D8 D8+i |
FCOMP ST(i) |
比較 ST(0) 與 ST(i),並彈出暫存器堆疊。 |
D8 D9 |
FCOMP |
比較 ST(0) 與 ST(1),並彈出暫存器堆疊。 |
DE D9 |
FCOMPP |
比較 ST(0) 與 ST(1),並彈出暫存器堆疊兩次。 |
比較暫存器 ST(0) 的內容與源運算元的值,並根據結果設定 FPU 狀態字中的條件程式碼標誌 C0、C2 及 C3(請參閱下表)。源運算元可以是數據暫存器或記憶體位置。如果沒有給出源運算元,則比較 ST(0) 中的值與 ST(1) 中的值。忽略 0 的符號,因此 -0.0 +0.0。
條件 |
C3 |
C2 |
C0 |
ST(0) > SRC |
0 |
0 |
0 |
ST(0) < SRC |
0 |
0 |
1 |
ST(0) SRC |
1 |
0 |
0 |
無序* |
1 |
1 |
1 |
備註:*如果產生無掩碼算術運算元無效 (#IA) 異常,則不設定標誌。
此指令會檢查比較的數值的類別(請參閱本章中的 FXAM - 檢查)。如果任何一個運算元是 NaN,或是不支援的格式,則觸發算術運算元無效異常 (#IA);如果遮蔽此異常,則條件標誌設定為“無序”。如果未遮蔽算術運算元無效異常,則不設定條件程式碼標誌。
執行比較操作之後,FCOMP 指令彈出暫存器堆疊;執行比較操作之後,FCOMPP 指令彈出暫存器堆疊兩次。要彈出暫存器堆疊,處理器將 ST(0) 暫存器標記為空,並使堆疊指針 (TOP) 遞增 1。
FCOM 指令執行的操作與 FUCOM 指令相同。唯一的區別在於處理 QNaN 運算元的方式。有一個運算元是或兩個運算元都是 NaN,或是不支援的格式時,FCOM 指令觸發算術運算元無效異常 (#IA)。FUCOM 指令執行的操作與 FCOM 指令相同,只是它不會針對 QNaN 產生算術運算元無效異常。
CASE (relation of operands) OF
ST > SRC: C3, C2, C0 000;
ST < SRC: C3, C2, C0 001;
ST SRC: C3, C2, C0 100;
ESAC;
IF ST(0) or SRC NaN or unsupported format
THEN
#IA
IF FPUControlWord.IM 1
THEN
C3, C2, C0 111;
FI;
FI;
IF instruction FCOMP
THEN
PopRegisterStack;
FI;
IF instruction FCOMPP
THEN
PopRegisterStack;
PopRegisterStack;
FI;
C1 - 如果發生堆疊下溢,則設定為 1;否則清除為 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。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。