数値演算コプロセッサ命令

略号の意味(追加)

オペランド

ST スタックトップレジスタ(ST、つまり ST(0) レジスタ)
ST(i) レジスタ(「i」は 0 以上 7 以下)
MR 実数を表すメモリオペランド
DWORD/QWORD(32/64 ビット)タイプのメモリ
MI 符号付き整数を表すメモリオペランド
WORD/DWORD(16/32 ビット)タイプのメモリ
MI WORD(16 ビット)タイプのメモリ(整数)
M80 TBYTE(80 ビット)タイプのメモリ(パック BCD 数)
M14B 14 バイトのメモリ(タイプは何でもよい)
M94B 94 バイトのメモリ(タイプは何でもよい)

説明

No Wait WAIT 命令の自動挿入が行われない命令

命令表
命令 オペランド サイズ 説明
F2XM1   2 2 の X 乗マイナス 1 ST ← 2^ST - 1
FABS   2 絶対値 ST ← |ST|
FADD
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FADDP ST(1),ST」 と同じ
加算 OP1 ← OP1 + OP2
加算 ST ← ST + OP
FADDP ST(i),ST 2 加算、ST をポップ OP1 ← OP1 + ST
FBLD M80 2 ロード(プッシュ)
FBSTP M80 2 ストア、ST をポップ OP ← ST
FCHS   2 符号反転 ST ← - ST
FCLEX   2 例外フラグ、ビジーフラグ、ステータスワードの
FNCLEX     ビット 7 をクリア(FNCLEX : No Wait)
FCOM
ST(i)
MR
2
2
2+M
「FCOM ST(1)」 と同じ
比較 ST - OP
(コンディションコードの設定のみで
オペランド、ST は変化しない)
FCOMP
ST(i)
MR
2
2
2+M
「FCOMP ST(1)」 と同じ
比較、ST をポップ ST - OP
FCOMPP   2 比較、現在の ST と ST(1) をポップ
ST - ST(1)
FDECSTP   2 スタックトップポインタを 1 減らす
ST ← ST(7) ← ST(6) ← ... ← ST(1) ← ST
FDISI   2 割り込みマスクをセットする(割り込み禁止)
FNDISI     (FNDISI : No Wait)
FDIV
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FDIVP ST(1),ST」 と同じ
除算 OP1 ← OP1 / OP2
除算 ST ← ST / OP
FDIVR
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FDIVRP ST(1),ST」 と同じ
除算 OP1 ← OP2 / OP1
除算 ST ← OP / ST
FENI   2 割り込みマスクをクリアする(割り込み許可)
FNENI     (FNENI : No Wait)
FFREE ST(i) 2 指定レジスタのタグワードを 11b にセット
(このレジスタが空になったことを示す)
FIADD MI 2+M 整数を加算 ST ← ST + OP2
FICOM MI 2+M 整数と比較 ST - OP
FICOMP MI 2+M 整数と比較、ST をポップ ST - OP
FIDIV MI 2+M 整数を除算 ST ← ST / OP2
FIDIVR MI 2+M 整数から除算 ST ← OP2 / ST
FILD MI 2+M 整数をロード(プッシュ)
FIMUL MI 2+M 整数を乗算 ST ← STラOP2
FINCSTP   2 スタックトップポインタを 1 増やす
ST ← ST(1) ← ST(2) ← ... ← ST(7) ← ST
FINIT   2 数値演算コプロセッサを初期化する
FNINIT     (FNINIT : No Wait)
FIST MI 2+M 整数型でストア OP ← ST
FISTP MI 2+M 整数型でストア、ST をポップ OP ← ST
FISUB MI 2+M 整数を減算 ST ← ST - OP2
FISUBR MI 2+M 整数から減算 ST ← OP2 - ST
FLD ST(i)
MR
2
2+M
ロード(プッシュ)
OP → ST → ST(1) → ST(2) → ... → ST(7)
FLD1   2 1.0 をロード(プッシュ)
FLDCW M16 2+M コントロールワード ← OP
FLDENV M14B 2+M 環境データ(14 バイト) ← OP
FLDL2E   2 log2e をロード(プッシュ)
FLDL2T   2 log210 をロード(プッシュ)
FLDLG2   2 log102 をロード(プッシュ)
FLDLN2   2 loge2 をロード(プッシュ)
FLDPI   2 πをロード(プッシュ)
FLDZ   2 0.0 をロード(プッシュ)
FMUL
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FMULP ST(1),ST」 と同じ
乗算 OP1 ← OP1ラOP2
乗算 ST ← STラOP
FNOP   2 何もしない
FN...   2 (WAIT 命令の挿入を伴わない制御命令)
FPATAN   2 ST(1) ← arctan( ST(1) / ST )
さらに ST をポップ(結果は新 ST に)
( |ST(1) / ST|< 1 であること)
FPREM   2 剰余(符号は ST と同じ)
ST ← ST/ST(1) の 0 方向切捨て時誤差
(終了時の C2 フラグが 1 ならば、計算は未完なので引続きこの命令を行う必要がある)
FPTAN   2 ST ← tan(ST)
さらに 1.0 をプッシュ
FRNDINT   2 ST を整数へ丸める(デフォルトでは至近値)
FRSTOR M94B 2+M 全レジスタ(94 バイト) ← OP
FSAVE M94B 2+M OP ← 全レジスタ(94 バイト)
FNSAVE     さらに FINIT(FNINIT) 命令相当の作業を行う
(FNSAVE : No Wait)
FSCALE   2 ST ← STラ2^( ST(1) の切捨て整数値 )
( |ST(1)|>= 1 であること)
FSQRT   2 平方根 ST ← ST の平方根
FST ST(i)
MR
2
2+M
ストア
OP ← ST
FSTCW M16 2+M OP ← コントロールワード
FSTENV M14B 2+M OP ← 環境データ(14 バイト)
FSTP ST(i)
MR
2
2+M
ストア、 ST をポップ
OP ← ST ← ST(1) ← ST(2) ← ... ← ST(7)
FSTSW M16
AX
2+M
2+M
OP ← ステータスワード
(AX のオペランドは 287 以上のみ可)
FSUB
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FSUBP ST(1),ST」 と同じ
減算 OP1 ← OP1 - OP2
減算 ST ← ST - OP
FSUBR
ST,ST(i)
ST(i),ST
MR
2
2
2
2+M
「FSUBRP ST(1),ST」 と同じ
減算 OP1 ← OP2 - OP1
減算 ST ← OP - ST
FSUBP ST(i),ST 2 減算、ST をポップ OP1 ← OP1 - ST
FSUBP ST(i),ST 2 減算、ST をポップ OP1 ← ST - OP1
FTST   2 0.0 との比較 ST - 0.0
FWAIT   2 WAIT 命令と同じ
FXAM   2 ST の値によってフラグを設定する
FXCH
ST(i)
2
2
「FXCH ST(1)」 と同じ
ST の値と OP の値を交換する
FXTRACT   2 ST ← ST の指数部分
さらに旧 ST の仮数部分(1 以下)をプッシュ
FYL2X   2 ST(1) ← ST(1)ラlog2ST
さらに ST をポップ
FYL2XP1   2 ST(1) ← ST(1)ラlog2(ST+1)
さらに ST をポップ
(|ST|< 1 - v 2 / 2 であること)



[目次]