F
で始まる.P
になっているものは“with POP”の意味で,
演算などの操作が終わったあとでスタックをポップする.
FCOMP
みたいに機能名自体がP
で終わっているものもはPOPの意味にならないことに注意.
FCOMP
の場合,POP機能つきの命令はFCOMPP
となる.
P
がついていないのに演算後にスタックをポップする命令がある.
たとえば,FYL2X
はST(1) ← ST(1) × log2(ST); pop ST;
となっている.
これは,ST
がlog2
をとるための一時的な値と考えられるため,
このような仕様になったのだと思われる.
一時的に必要な値をスタックにプッシュしてFYL2X
を演算したあと自動的に除去されるようなイメージになっている.
ST
と何かになる.
したがって,ST
はオペランドとしては明示的にはでてこないのが普通.
ST
とST(i)
をオペランドとする命令でST(i)
を省略すると
ST
とST(1)
がオペランドとして仮定される(のが普通).
R
(ReverseのR)がついている.
たとえば,除算(÷)では,
指定したオペランドで割るFDIV
と,指定したオペランドを割るFDIVR
がある.
命令 | 動作 |
---|---|
F2XM1 | 2x-1 |
FABS | abs(x) |
FADD /FADDP /FIADD | 加算 |
FBLD | Load Binary Coded Decimal |
FBSTP | Store Binary Coded Decimal and Pop |
FCHS | Change Sign |
FCLEX /FNCLEX | Clear Exception |
FCOM /FCOMP /FCOMPP | Compare Real |
FCOS | cos(x) |
FDECSTP | Decrement Stack-Top Pointer |
FDIV /FDIVP /FIDIV | Divide |
FDIVR/FDIVRP/FIDIVR | Reverse Divide |
FFREE |
Free Floating-Point Registerffree ST(i) ;ST(i)のタグに空を意味する11Bをセットする.
|
FICOM /FICOMP |
Compare Integer 0.0と比較する場合は FTST (Floating-Point Test),
浮動小数点数同士を比較する場合はFXAM (Floting-Point Examine)を用いる.
|
FILD |
Load Integer スタックトップに指定された整数値をプッシュする. |
FINCSTP |
Increment Stack-Top Pointer スタックトップポインタをインクリメントする. スタックのスロットは8個(0〜7)なので,7の場合は0にもどる. |
FINIT /FNINIT |
Initialize Floating-Point Unit Control Word CW = 037H,Status Word SW = 0,Tag Word TW = FFFFHほか,いろいろ初期化する. 037Hは,ラウンドコントロール(RC)をRound to Near,すべての例外をマスク, 精度(PC)に64ビット(仮数部だけで64ビット=全体で80ビットの拡張倍精度)を指定する. |
FIST /FISTP |
Store Integer ストアする際にはRCフィールドに設定されている丸めモードに従って丸め処理が行われる. |
FISTTP |
Store Integer with Truncation 浮動小数→整数変換時には必ず切り捨て丸め(truncation)を適用する. RCフィールドに設定されている丸めモードは無視する. x87 FPUに対する命令だが,命令セットとしてはSSE3命令に分類されていて,実装されているのはPrescott以降. |
FLD |
Load Real 字数をスタックにプッシュする. FLD ST(i) の形でも利用でき,この場合はスタックのスロットST(i) の値を複製してスタックにプッシュすることになる.
|
FLD1 FLDL2T FLDL2E FLDIP FLDLG2 FLDLN2 FLDZ |
Load Constant 各命令は以下の値をプッシュする.FLD1 +1.0FLDL2T log2(10)FLDL2E log2(e)FLDPI 円周率πFLDLG2 log10(2)FLDLN2 loge(2)FLDZ +0.0
|
FLDCW | Load Control Word |
FLDENV | Load FPU Environment |
FMUL /FMULP /FIMUL | Multiply |
FNOP | No Operation |
FPATAN | Partial Arctangent |
FPREM | Partial Reminder |
FPREM1 | Partial Reminder |
FPTAN | Partial Tangent |
FRNDINT |
Round to Integer スタックトップの値を丸め処理してスタックトップに格納する. 整数型に変換したいのであれば FIST またはFISTP を使う.
FRNDINT はあくまで浮動小数点型を保持しつつ,整数値に丸めたい場合に使用する(スタックトップの値を丸めてスタックトップにかきもどす).
|
FRSTR | Restore FPU State |
FSAVE /FNSAVE | Store FPU State |
FSCALE |
Scale スタックトップ ST の値を2のST(1) 乗でスケーリング(桁合わせ)する.
ST←ST×2ST(1)
|
FSIN | Sine |
FSINCOS |
Sine and Cosine スタックトップ ST のsin(ST )とcos(ST )を同時に算出し,
現在のスタックトップをsin(ST )でかきかえ,cos(ST )を新たにスタックに積む.
|
FSQRT | Square Root 平方根 |
FST /FSTP | Store Real |
FSTCW /FNSTCW | Store Control Word |
FSTENV /FNSTENV | Store FPU Environment |
FSTSW /FNSTSW | Store Status Word |
FSUB /FSUBP /FISUB | Subtract |
FSUBR /FSUBRP /FISUBR | Reverse Subtract |
FTST |
TEST スタックトップSTの値を0.0と比較して,FPUフラグのC0,C2,C3に次の値を設定する(C2が飛んでいるのは間違いではない). |
FUCOM /FUCOMP /FUCOMPP |
Unordered Compare Real スタックトップ ST の値をソースSRC の値と比較する.
SRC にはST(i) が指定できる.
省略するとSRC はST(1) になる.
|
FWAIT | Wait |
FXAM |
Examine 浮動小数点数の内容を検査する. |
FXCH | Exchange Register Contents |
FYL2X | y ← y × log2(x) |
FYL2XP1 | y ← y × log2(x + 1) |