24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

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

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 基本命令リファレンス

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!