FDIVR/FDIVRP/FIDIVR - 被除

操作碼

指令

說明

D8 /7

FDIVR m32real

m32real 除以 ST(0),結果儲存到 ST(0)

DC /7

FDIVR m64real

m64real 除以 ST(0),結果儲存到 ST(0)

D8 F8+i

FDIVR ST(0), ST(i)

將 ST(i) 除以 ST(0),結果儲存到 ST(0)

DC F0+i

FDIVR ST(i), ST(0)

將 ST(0) 除以 ST(i),結果儲存到 ST(i)

DE F0+i

FDIVRP ST(i), ST(0)

將 ST(0) 除以 ST(i),結果儲存到 ST(i),並彈出暫存器堆疊

DE F1

FDIVRP

將 ST(0) 除以 ST(1),結果儲存到 ST(1),並彈出暫存器堆疊

DA /7

FIDIVR m32int

m32int 除以 ST(0),結果儲存到 ST(0)

DE /7

FIDIVR m16int

m16int 除以 ST(0),結果儲存到 ST(0)

說明

將源運算元除以目標運算元,結果儲存到目標位置。目標運算元(除數)總是位於 FPU 暫存器,源運算元(被除數)可以是暫存器或記憶體位置。記憶體中的源運算元可以是單精度實數、雙精度實數、字整數或短整數格式。

這些指令執行 FDIV、FDIVP 及 FIDIV 指令的逆操作。提供它們是爲了支援更高效地編碼。

無運算元版的指令將 ST(0) 暫存器的內容除以 ST(1) 暫存器的內容。單運算元版將記憶體位置的內容(實數或整數值)除以 ST(0) 暫存器的內容。雙運算元版將 ST(i) 暫存器的內容除以 ST(0) 暫存器的內容,或者相反。

儲存結果之後,FDIVRP 指令執行彈出 FPU 暫存器堆疊的附加操作。爲了彈出暫存器堆疊,處理器將 ST(0) 暫存器標記為空,並使堆疊指針 (TOP) 遞增 1。無運算元版的浮點除法指令總是彈出暫存器堆疊。在某些彙編器中,此指令的助記符是 FDIVR 而不是 FDIVRP。

執行除法之前,FIDIVR 指令將整型源運算元轉換為成擴充套件型實數格式。

如果產生無掩碼除零異常 (#Z),則不儲存任何結果;如果遮蔽該異常,則將帶適當符號的 儲存到目標運算元。

下表顯示將各類數值相除時得到的結果(假設未發生上溢或下溢)。

 

DEST

 

 

 

 

 

 

 

SRC

 

-

-F

-0

+0

+F

+

NaN

-

*

+

+

-

-

*

NaN

-F

+0

+F

**

**

-F

-0

NaN

-I

+0

+F

**

**

-F

-0

NaN

-0

+0

+0

*

*

-0

-0

NaN

+0

-0

-0

*

*

+0

+0

NaN

+I

-0

-F

**

**

+F

+0

NaN

+F

-0

-F

**

**

+F

+0

NaN

+

*

-

-

+

+

*

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

備註:F 表示有限實數。I 表示整數。

* 表示浮點算術運算元無效 (#IA) 異常。

** 表示浮點除零 (#Z) 異常。

源運算元為整數 0 時,它被當作 +0。

操作

IF DEST = 0
THEN
#Z
ELSE
IF instruction is FIDIVR
THEN
DEST ConvertExtendedReal(SRC) / DEST;
ELSE (* source operand is real number *)
DEST SRC / DEST;
FI;
FI;
IF instruction FDIVRP
THEN
PopRegisterStack
FI;

影響的 FPU 標誌

C1 - 如果發生堆疊下溢,則設定為 0。如果產生不精確的結果異常 (#P),則表示取整方向:

0 非向上取整;1 向上取整。

C0、C2、C3 - 未定義。

浮點異常

#IS - 發生堆疊下溢。

#IA - 運算元是 SNaN 值或不支援的格式。

±∞ / ±∞; ±0 / ±0

#D - 源運算元是非規格化值。

#Z - SRC / ±0,其中 SRC 不等於 ±0。

#U - 結果對於目標格式而言太小。

#O - 結果對於目標格式而言太大。

#P - 值無法按目標格式精確表示。

保護模式異常

#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) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。