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)の値を複製してスタックにプッシュすることになる.
|
FLD1FLDL2TFLDL2EFLDIPFLDLG2FLDLN2FLDZ |
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) |