FYL2X - 計算 y * log2x

操作碼

指令

說明

D9 F1

FYL2X

將 ST(1) 替換成 (ST(1) * log2ST(0)),並彈出暫存器堆疊

說明

計算 (ST(1) * log2 (ST(0))),結果儲存到暫存器 ST(1),並彈出 FPU 暫存器堆疊。ST(0) 中的源運算元必須是非零正數。

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

 

ST(0)

 

 

 

 

 

 

ST(1)

 

-

-F

±0

+0 < +F < +1

+1

+F > +1

+

NaN

-

*

*

+

+

*

-

-

NaN

-F

*

*

**

+F

-0

-F

-

NaN

-0

*

*

*

+0

-0

-0

*

NaN

+0

*

*

*

-0

+0

+0

*

NaN

+F

*

*

**

-F

+0

+F

+

NaN

+

*

*

-

-

*

+

+

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

NaN

備註:F 表示有限實數。

* 表示浮點操作無效 (#IA) 異常。

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

如果給除零異常設定掩碼,且暫存器 ST(0) 包含 ±0,則指令將返回 ,其符號與暫存器 ST(1) 中源運算元的符號相反。

FYL2X 指令設計用於配合內建乘法,以優化計算任意正底數 (b) 的對數:

logbx (log2b)-1 * log2x

操作

ST(1) ST(1) * log2ST(0);
PopRegisterStack;

影響的 FPU 標誌

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

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

C0、C2、C3 - 未定義。

浮點異常

#IS - 發生堆疊下溢。

#IA - 運算元是 SNaN 或不支援的格式。暫存器 ST(0) 中的源運算元為負有限值(不是 -0)。

#Z - ST(0) 中的源運算元為 ±0。

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

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

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

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

保護模式異常

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

實地址模式異常

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

虛 8086 模式異常

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