24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

FCOMI/FCOMIP/FUCOMI/FUCOMIP—Compare Real and Set EFLAGS オペコード 命令 説明 DB F0+i FCOMI ST, ST(i) ST(0) を ST(i) と比較し、結果に従ってステータス・フラグをセット する。 DF F0+i FCOMIP ST, ST(i) ST(0) を ST(i) と比較し、結果に従ってステータス・フラグをセット し、レジスタ・スタックをポップする。 DB E8+i FUCOMI ST, ST(i) ST(0) を ST(i) と比較し、順序付け値の有無をチェックし、結果に 従ってステータス・フラグをセットする。 DF E8+i FUCOMIP ST, ST(i) ST(0) を ST(i) と比較し、順序付け値の有無をチェックし、結果に 従ってステータス・フラグをセットし、レジスタ・スタックをポッ プする。 説明 レジスタ ST(0) と ST(i) の内容を比較し、 結果に従っ て EFLAGS レジスタ内のステータ ス・フラグZF、 PF、 CF をセッ ト する ( 以下の表を参照 )。 これらの命令の比較では、 ゼ ロの符号は無視される。 すなわち、 -0.0 = +0.0 である。 比較結果 ZF PF CF ST0 > ST(i) 0 0 0 ST0 < ST(i) 0 0 1 ST0 = ST(i) 1 0 0 順序付けなし a 1 1 1 a. マスクされていない無効算術オペランド (#IA) 例外が生 成された場合、フラグはセットされない。 FCOMI/FCOMIP 命令が行 う 操作は、 QNaN オペラン ド の取り扱い方を除いて FUCOMI/ FUCOMIP 命令のそれ と 同じ である。 FCOMI/FCOMIP 命令は、 一方 ま たは両方のオペラ ンドがNaN 値 (SNaN または QNaN) であるか、 またはそれらのフ ォ ーマッ ト がサポー ト されていないと きは、 ステータス ・ フラグを 「順序付けなし」 に設定し、 無効算術オペ ランド例外(#IA) を発生する。 FUCOMI/FUCOMIP 命令が行 う 操作は、 オペラ ン ド が QNaN 値であ っ て も 無効算術オペ ランド例外を発生しない点を除いて FCOMI/FCOMIP 命令の操作 と 同じ である。 無効操作例外がマス ク されていない場合は、 無効算術オペラ ン ド 例外が発生して も 、 ス テータス ・ フラグはセッ ト されない。 FCOMIP およびFUCOMIP 命令は、 比較操作の後に さ ら に レ ジ ス タ ・ ス タ ッ ク を ポ ッ プ する。 レジスタ ・ スタッ クをポップするため、 プロセッサは ST(0) レジスタを空として マークし、 スタッ ク ・ ポインタ (TOP) を 1 インク リメントする。 3:476 第 3 巻 : IA-32 基本命令リファレンス

FCOMI/FCOMIP/FUCOMI/FUCOMIP—Compare Real and Set EFLAGS ( 続き ) 操作 CASE (relation of operands) OF ST(0) > ST(i): ZF, PF, CF ← 000; ST(0) < ST(i): ZF, PF, CF ← 001; ST(0) = ST(i): ZF, PF, CF ← 100; ESAC; IF instruction is FCOMI or FCOMIP THEN IF ST(0) or ST(i) = NaN or unsupported format THEN #IA IF FPUControlWord.IM = 1 THEN ZF, PF, CF ← 111; FI; FI; FI; IF instruction is FUCOMI or FUCOMIP THEN IF ST(0) or ST(i) = QNaN, but not SNaN or unsupported format THEN ZF, PF, CF ← 111; ELSE (* ST(0) or ST(i) is SNaN or unsupported format *) #IA; IF FPUControlWord.IM = 1 THEN ZF, PF, CF ← 111; FI; FI; FI; IF instruction is FCOMIP or FUCOMIP THEN PopRegisterStack; FI; FPU 影響を受けるフラグ C1 ス タ ッ ク ・ アンダ フ ロ ーが発生した場合は 0 にセッ ト さ れ、 発生しなか っ た場合は 0 にクリアされる。 C0、 C2、 C3 影響を受けない。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト 浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfl が 1 の場合 )、 NaT レ ジ ス タ参照アボ ー ト 。 第 3 巻 : IA-32 基本命令リファレンス 3:477

FCOMI/FCOMIP/FUCOMI/FUCOMIP—Compare Real and Set EFLAGS ( 続き )<br />

操作<br />

CASE (relation of operands) OF<br />

ST(0) > ST(i): ZF, PF, CF ← 000;<br />

ST(0) < ST(i): ZF, PF, CF ← 001;<br />

ST(0) = ST(i): ZF, PF, CF ← 100;<br />

ESAC;<br />

IF instruction is FCOMI or FCOMIP<br />

THEN<br />

IF ST(0) or ST(i) = NaN or unsupported format<br />

THEN<br />

#IA<br />

IF FPUControlWord.IM = 1<br />

THEN<br />

ZF, PF, CF ← 111;<br />

FI;<br />

FI;<br />

FI;<br />

IF instruction is FUCOMI or FUCOMIP<br />

THEN<br />

IF ST(0) or ST(i) = QNaN, but not SNaN or unsupported format<br />

THEN<br />

ZF, PF, CF ← 111;<br />

ELSE (* ST(0) or ST(i) is SNaN or unsupported format *)<br />

#IA;<br />

IF FPUControlWord.IM = 1<br />

THEN<br />

ZF, PF, CF ← 111;<br />

FI;<br />

FI;<br />

FI;<br />

IF instruction is FCOMIP or FUCOMIP<br />

THEN<br />

PopRegisterStack;<br />

FI;<br />

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

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

れ、 発生しなか っ た場合は 0 にクリアされる。<br />

C0、 C2、 C3 影響を受けない。<br />

追加の Itanium ベース・システム環境例外<br />

Itanium アーキテクチャ ・<br />

レジスタ ・ フォルト<br />

浮動小数点レ ジ ス タ無効フ ォ ル ト (PSR.dfl が 1 の場合 )、<br />

NaT レ ジ ス タ参照アボ ー ト 。<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!