24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

FDIV/FDIVP/FIDIV—Divide オペコード 命令 説明 D8 /6 FDIV m32real ST(0) を m32real で割り、結果を ST(0) にストアする。 DC /6 FDIV m64real ST(0) を m64real で割り、結果を ST(0) にストアする。 D8 F0+i FDIV ST(0), ST(i) ST(0) を ST(i) で割り、結果を ST(0) にストアする。 DC F8+i FDIV ST(i), ST(0) ST(i) を ST(0) で割り、結果を ST(i) にストアする。 DE F8+i FDIVP ST(i), ST(0) ST(i) を ST(0) で割り、結果を ST(i) にストアし、レジスタ・スタッ クをポップする。 DE F9 FDIVP ST(1) を ST(0) で割り、結果を ST(1) にストアし、レジスタ・ス タックをポップする。 DA /6 FIDIV m32int ST(0) を m32int で割り、結果を ST(0) にストアする。 DE /6 FIDIV m16int ST(0) を m64int で割り、結果を ST(0) にストアする。 説明 デスティネーション・オペランドをソース・オペランドで割り、 結果をデスティネー ション・ロケーションにストアする。 デスティネーション・オペランド ( 被除数 ) は常 に FPU レジスタである。 ソース ・ オペランド ( 除数 ) には、 レジスタまたはメモリ ・ ロ ケ ー シ ョ ン を使用で き る。 メ モ リ 内の ソ ー ス ・ オペラ ン ド には、 単精度実数、 倍精度実 数、 ワ ー ド 整数、 ま たは シ ョ ー ト 整数の フ ォ ー マ ッ ト を使用で き る。 この命令のオペランドなしバージョンでは、 ST(1) レジスタの内容を ST(0) レジスタの内 容で割る。 1 オペラン ド ・ バージ ョ ンでは、 ST(0) レジスタの内容をメモリ ・ ロケーショ ンの内容 ( 実数 ま たは整数値 ) で割る。 2 オペラン ド ・ バージ ョ ンでは、 ST(0) レジスタ の内容を ST(i) レ ジスタの内容で割るか、 ま たはその逆の除算を行 う 。 FDIVP 命令は、 除算結果を ス ト アした後に、 追加操作 と して FPU レジスタ ・ スタックを ポップする。 レジスタ・スタックをポップするため、 プロセッサはST(0) レジスタを空 としてマークし、 スタック ・ポインタ (TOP) を 1 イ ン ク リ メ ン ト す る。 こ れ ら の浮動小 数点除算命令のオペラ ン ド なしバー ジ ョ ンでは、 常に レ ジ ス タ ・ ス タ ッ ク のポ ッ プを伴 う。 一部のアセンブラでは、 この命令のニーモニックは FDIVP ではな く FDIV になって いる。 FIDIV 命令は、 整数の ソ ー ス ・ オペラ ン ド を拡張実数フ ォ ー マ ッ ト に変換してか ら 除算 を行う。 ソース ・ オペラン ド は、 整数 0 のときは +0 として取り扱われる。 ゼ ロ に よ る除算例外 (#Z) が発生して も 、 それがマス ク されていない場合は結果はス ト ア されない。 こ の例外がマス ク されていた場合は、 正しい符号の∞がデステ ィ ネ ー シ ョ ン・オペランドにストアされる。 以下の表に、 オーバフローもアンダフローも発生しないものとして、 さまざまなクラス の数の除算を行ったと きに得られる結果を示す。 3:482 第 3 巻 : IA-32 基本命令リファレンス

FDIV/FDIVP/FIDIV—Divide ( 続き ) DEST −∞ −F −0 +0 +F +∞ NaN −∞ * +0 +0 −0 −0 * NaN −F +∞ +F +0 −0 −F −∞ NaN −I +∞ +F +0 −0 −F −∞ NaN SRC −0 +∞ ** * * ** −∞ NaN +0 −∞ ** * * ** +∞ NaN +I −∞ −F −0 +0 +F +∞ NaN +F −∞ −F −0 +0 +F +∞ NaN +∞ * −0 −0 +0 +0 * NaN NaN NaN NaN NaN NaN NaN NaN NaN 注 : F 有限実数を示す。 I 整数を示す。 * 浮動小数点無効算術オペランド (#IA) 例外を示す。 ** 浮動小数点 0 による除算 (#Z) 例外を示す。 操作 IF SRC = 0 THEN #Z ELSE IF instruction is FIDIV THEN DEST ← DEST / ConvertExtendedReal(SRC); ELSE (* source operand is real number *) DEST ← DEST / SRC; FI; FI; IF instruction = FDIVP THEN PopRegisterStack FI; FPU 影響を受けるフラグ C1 ス タ ッ ク ・ アンダ フ ロ ーが発生した場合は 0 にセッ ト され る。 不正確結果例外 (#P) が発生した場合は、 丸めの方向を示 す。 0 = 切り上げなし、 1 = 切り上げ。 C0、 C2、 C3 未定義。 第 3 巻 : IA-32 基本命令リファレンス 3:483

FDIV/FDIVP/FIDIV—Divide ( 続き )<br />

DEST<br />

−∞ −F −0 +0 +F +∞ NaN<br />

−∞ * +0 +0 −0 −0 * NaN<br />

−F +∞ +F +0 −0 −F −∞ NaN<br />

−I +∞ +F +0 −0 −F −∞ NaN<br />

SRC −0 +∞ ** * * ** −∞ NaN<br />

+0 −∞ ** * * ** +∞ NaN<br />

+I −∞ −F −0 +0 +F +∞ NaN<br />

+F −∞ −F −0 +0 +F +∞ NaN<br />

+∞ * −0 −0 +0 +0 * NaN<br />

NaN NaN NaN NaN NaN NaN NaN NaN<br />

注 :<br />

F 有限実数を示す。<br />

I 整数を示す。<br />

* 浮動小数点無効算術オペランド (#IA) 例外を示す。<br />

** 浮動小数点 0 による除算 (#Z) 例外を示す。<br />

操作<br />

IF SRC = 0<br />

THEN<br />

#Z<br />

ELSE<br />

IF instruction is FIDIV<br />

THEN<br />

DEST ← DEST / ConvertExtendedReal(SRC);<br />

ELSE (* source operand is real number *)<br />

DEST ← DEST / SRC;<br />

FI;<br />

FI;<br />

IF instruction = FDIVP<br />

THEN<br />

PopRegisterStack<br />

FI;<br />

FPU 影響を受けるフラグ<br />

C1 ス タ ッ ク ・ アンダ フ ロ ーが発生した場合は 0 にセッ ト され<br />

る。<br />

不正確結果例外 (#P) が発生した場合は、 丸めの方向を示<br />

す。 0 = 切り上げなし、 1 = 切り上げ。<br />

C0、 C2、 C3 未定義。<br />

第 3 巻 : IA-32 基本命令リファレンス 3:483

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!