24531904_j
24531904_j 24531904_j
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
- Seite 438 und 439: CMOVcc—Conditional Move オペコ
- Seite 440 und 441: CMOVcc—Conditional Move ( 続き
- Seite 442 und 443: CMP—Compare Two Operands オペ
- Seite 444 und 445: CMPS/CMPSB/CMPSW/CMPSD—Compare St
- Seite 446 und 447: CMPS/CMPSB/CMPSW/CMPSD—Compare St
- Seite 448 und 449: CMPXCHG—Compare and Exchange (
- Seite 450 und 451: CMPXCHG8B—Compare and Exchange 8
- Seite 452 und 453: CPUID—CPU Identification オペ
- Seite 454 und 455: CPUID—CPU Identification ( 続き
- Seite 456 und 457: CPUID—CPU Identification ( 続き
- Seite 458 und 459: CWDE—Convert Word to Doubleword
- Seite 460 und 461: DAS—Decimal Adjust AL after Subtr
- Seite 462 und 463: DEC—Decrement by 1 ( 続き ) #AC
- Seite 464 und 465: DIV—Unsigned Divide ( 続き ) FI
- Seite 466 und 467: ENTER—Make Stack Frame for Proced
- Seite 468 und 469: ENTER—Make Stack Frame for Proced
- Seite 470 und 471: F2XM1—Compute 2 x -1 ( 続き )
- Seite 472 und 473: FADD/FADDP/FIADD—Add オペコー
- Seite 474 und 475: FADD/FADDP/FIADD—Add ( 続き )
- Seite 476 und 477: FBLD—Load Binary Coded Decimal
- Seite 478 und 479: FBSTP—Store BCD Integer and Pop
- Seite 480 und 481: FBSTP—Store BCD Integer and Pop (
- Seite 482 und 483: FCLEX/FNCLEX—Clear Exceptions オ
- Seite 484 und 485: FCMOVcc—Floating-Point Conditiona
- Seite 486 und 487: FCOM/FCOMP/FCOMPP—Compare Real (
- Seite 490 und 491: FCOMI/FCOMIP/ FUCOMI/FUCOMIP—Comp
- 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 オペ
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