操作碼 |
指令 |
說明 |
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;
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。
#NM - 如果 CR0 中的 EM 或 TS 設定為 1。