24531904_j
24531904_j 24531904_j
FSCALE—Scale オペコード 命令 説明 D9 FD FSCALE ST(0) を ST(1) でスケーリングする。 説明 デステ ィ ネーシ ョ ン ・ オペラン ド に 2 のソース ・ オペラン ド乗を掛け、 結果をデステ ィ ネ ー シ ョ ン ・ オペラ ン ド にス ト アす る。 こ の命令に よ っ て、 2 の整数乗に よ る高速の乗 算または除算が可能になる。 デスティネーション・オペランドは、 ST(0) レジスタにスト ア されている実数値である。 ソ ー ス ・ オペラ ン ド は、 ST(1) レジスタの値より小さ く、 か つそれに最も近い整数値である ( すなわち、 ST(1) レジスタの値を 0 に向かって切り捨て た、 元の値に最も近い整数値がソ ース ・ オペラ ン ド にな っている )。 実際のスケー リ ング 操作は、 レ ジ ス タ ST(0) の値の指数にソ ース ・ オペラン ド ( 整数値 ) を加算して実行され る。 以下の表に、 オーバフローもアンダフローも発生しないものとして、 さまざまなク ラスの数をスケー リングしたと きに得られる結果を示す。 −N ST(1) 0 +N −∞ −∞ −∞ −∞ ST(0) −F −F −F −F −0 −0 −0 −0 +0 +0 +0 +0 +F +F +F +F +∞ +∞ +∞ +∞ NaN NaN NaN NaN 注 : F 有限実数を示す。 N 整数を示す。 ほ と ん ど の場合、 指数だけが変更されて仮数は変更 さ れない。 ただし、 ST(0) 内のスケ ー リ ン グ さ れる値がデ ノ ー マル値の と き は、 仮数 も 変更され、 結果は正規化数にな る場合 がある。 同様に、 ス ケ ー リ ング操作の結果オ ー バフ ロ ー ま たはアンダ フ ロ ー が発生した 場合、 結果の仮数は ソ ー スの仮数 と は異な る こ と にな る。 SCALE 命令を使用して、 以下の例に示す よ う に FXTRACT 命令の処理を逆に も で き る。 FXTRACT; FSCALE; FSTP ST(1); この例では、 FXTRACT 命令が ST(0) の値か ら仮数 と 指数を抽出し、 それぞれ ST(0) と ST(1) にス トアしている。 次に、 FSCALE 命令が ST(0) 内の仮数を ST(1) 内の指数でス ケーリングし、 FXTRACT 操作が行われる前の元の値を作成し直している。 FSTP ST(1) 命令は、 作成し直された値を、 元の値が置かれていた FPU レジスタに返す。 操作 ST(0) ← ST(0) ∗ 2 ST(1) ; 3:530 第 3 巻 : IA-32 基本命令リファレンス
FSCALE—Scale ( 続き ) FPU 影響を受けるフラグ C1 ス タ ッ ク ・ アンダ フ ロ ーが発生した場合は 0 にセッ ト され る。 不正確結果例外 (#P) が発生した場合は、 丸めの方向を示 す。 0 = 切り上げなし、 1 = 切り上げ。 C0、 C2、 C3 未定義。 浮動小数点例外 #IS ス タ ッ ク ・ アンダ フ ロ ーが発生した場合。 #IA ソース・オペランドがSNaN 値であるか、 ま たはその フォーマットがサポートされていない場合。 #D ソ ー ス ・ オペラ ン ド がデ ノ ー マル値である場合。 #U 結果が小さすぎて、 デスティネーション・フォーマットで 表現で き ない場合。 #O 結果が大きすぎて、 デスティネーション・フォーマットで 表現で き ない場合。 #P 値がデステ ィ ネ ーシ ョ ン ・ フ ォ ーマ ッ ト では正確に表現で きない場合。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト 保護モード例外 #NM CR0 の EM または TS がセッ ト された場合。 実アドレス・モード例外 #NM CR0 の EM または TS がセッ ト された場合。 仮想 8086 モード例外 浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfl が 1 の場合 )、 NaT レ ジ ス タ参照アボ ー ト 。 #NM CR0 の EM または TS がセッ ト された場合。 第 3 巻 : IA-32 基本命令リファレンス 3:531
- Seite 492 und 493: FCOS—Cosine ( 続き ) 追加の
- Seite 494 und 495: FDIV/FDIVP/FIDIV—Divide オペコ
- Seite 496 und 497: FDIV/FDIVP/FIDIV—Divide ( 続き
- Seite 498 und 499: FDIVR/FDIVRP/FIDIVR—Reverse Divid
- Seite 500 und 501: FDIVR/FDIVRP/FIDIVR—Reverse Divid
- Seite 502 und 503: FFREE—Free Floating-Point Registe
- Seite 504 und 505: FICOM/FICOMP—Compare Integer (
- Seite 506 und 507: FILD—Load Integer オペコード
- Seite 508 und 509: FINCSTP—Increment Stack-Top Point
- Seite 510 und 511: FIST/FISTP—Store Integer オペ
- Seite 512 und 513: FIST/FISTP—Store Integer ( 続き
- Seite 514 und 515: FLD—Load Real ( 続き ) 浮動
- Seite 516 und 517: FLD1/FLDL2T/FLDL2E/FLDPI/FLDLG2/FLD
- Seite 518 und 519: FLDCW—Load Control Word ( 続き
- Seite 520 und 521: FLDENV—Load FPU Environment ( 続
- Seite 522 und 523: FMUL/FMULP/FIMUL—Multiply ( 続
- Seite 524 und 525: FMUL/FMULP/FIMUL—Multiply ( 続
- Seite 526 und 527: FPATAN—Partial Arctangent オペ
- Seite 528 und 529: FPREM—Partial Remainder オペコ
- Seite 530 und 531: FPREM—Partial Remainder ( 続き
- Seite 532 und 533: FPREM1—Partial Remainder ( 続き
- Seite 534 und 535: FPTAN—Partial Tangent オペコ
- Seite 536 und 537: FRNDINT—Round to Integer オペ
- Seite 538 und 539: FRSTOR—Restore FPU State ( 続き
- Seite 540 und 541: FSAVE/FNSAVE—Store FPU State (
- Seite 544 und 545: FSIN—Sine オペコード 命令
- Seite 546 und 547: FSINCOS—Sine and Cosine オペコ
- Seite 548 und 549: FSQRT—Square Root オペコード
- Seite 550 und 551: FST/FSTP—Store Real オペコー
- Seite 552 und 553: FST/FSTP—Store Real ( 続き ) #A
- Seite 554 und 555: FSTCW/FNSTCW—Store Control Word (
- Seite 556 und 557: FSTENV/FNSTENV—Store FPU Environm
- Seite 558 und 559: FSTSW/FNSTSW—Store Status Word (
- Seite 560 und 561: FSUB/FSUBP/FISUB—Subtract ( 続
- Seite 562 und 563: FSUBR/FSUBRP/FISUBR—Reverse Subtr
- Seite 564 und 565: FSUBR/FSUBRP/FISUBR—Reverse Subtr
- Seite 566 und 567: FTST—TEST オペコード 命令
- Seite 568 und 569: FUCOM/FUCOMP/FUCOMPP—Unordered Co
- Seite 570 und 571: FWAIT—Wait 本章の 「WAIT」
- Seite 572 und 573: FXAM—Examine ( 続き ) 実アド
- Seite 574 und 575: FXCH—Exchange Register Contents (
- Seite 576 und 577: FXTRACT—Extract Exponent and Sign
- Seite 578 und 579: FYL2X—Compute y ∗ log 2 x ( 続
- Seite 580 und 581: FYL2XP1—Compute y ∗ log 2 (x +1
- Seite 582 und 583: IDIV—Signed Divide オペコー
- Seite 584 und 585: IDIV—Signed Divide ( 続き ) 実
- Seite 586 und 587: IMUL—Signed Multiply ( 続き ) 2
- Seite 588 und 589: IMUL—Signed Multiply ( 続き )
- Seite 590 und 591: IN—Input from Port ( 続き ) 操
FSCALE—Scale<br />
オペコード 命令 説明<br />
D9 FD FSCALE ST(0) を ST(1) でスケーリングする。<br />
説明<br />
デステ ィ ネーシ ョ ン ・ オペラン ド に 2 のソース ・ オペラン ド乗を掛け、 結果をデステ ィ<br />
ネ ー シ ョ ン ・ オペラ ン ド にス ト アす る。 こ の命令に よ っ て、 2 の整数乗に よ る高速の乗<br />
算または除算が可能になる。 デスティネーション・オペランドは、 ST(0) レジスタにスト<br />
ア されている実数値である。 ソ ー ス ・ オペラ ン ド は、 ST(1) レジスタの値より小さ く、 か<br />
つそれに最も近い整数値である ( すなわち、 ST(1) レジスタの値を 0 に向かって切り捨て<br />
た、 元の値に最も近い整数値がソ ース ・ オペラ ン ド にな っている )。 実際のスケー リ ング<br />
操作は、 レ ジ ス タ ST(0) の値の指数にソ ース ・ オペラン ド ( 整数値 ) を加算して実行され<br />
る。 以下の表に、 オーバフローもアンダフローも発生しないものとして、 さまざまなク<br />
ラスの数をスケー リングしたと きに得られる結果を示す。<br />
−N<br />
ST(1)<br />
0 +N<br />
−∞ −∞ −∞ −∞<br />
ST(0) −F −F −F −F<br />
−0 −0 −0 −0<br />
+0 +0 +0 +0<br />
+F +F +F +F<br />
+∞ +∞ +∞ +∞<br />
NaN NaN NaN NaN<br />
注 :<br />
F 有限実数を示す。<br />
N 整数を示す。<br />
ほ と ん ど の場合、 指数だけが変更されて仮数は変更 さ れない。 ただし、 ST(0) 内のスケ ー<br />
リ ン グ さ れる値がデ ノ ー マル値の と き は、 仮数 も 変更され、 結果は正規化数にな る場合<br />
がある。 同様に、 ス ケ ー リ ング操作の結果オ ー バフ ロ ー ま たはアンダ フ ロ ー が発生した<br />
場合、 結果の仮数は ソ ー スの仮数 と は異な る こ と にな る。<br />
SCALE 命令を使用して、 以下の例に示す よ う に FXTRACT 命令の処理を逆に も で き る。<br />
FXTRACT;<br />
FSCALE;<br />
FSTP ST(1);<br />
この例では、 FXTRACT 命令が ST(0) の値か ら仮数 と 指数を抽出し、 それぞれ ST(0) と<br />
ST(1) にス トアしている。 次に、 FSCALE 命令が ST(0) 内の仮数を ST(1) 内の指数でス<br />
ケーリングし、 FXTRACT 操作が行われる前の元の値を作成し直している。 FSTP ST(1)<br />
命令は、 作成し直された値を、 元の値が置かれていた FPU レジスタに返す。<br />
操作<br />
ST(0) ← ST(0) ∗ 2 ST(1) ;<br />
3:530 第 3 巻 : IA-32 基本命令リファレンス