24531904_j
24531904_j 24531904_j
IMUL—Signed Multiply ( 続き ) 2 および 3 オペラン ド 形式には、 積の下位半分は両オペラン ド の符号のあ りなしに関係 なく同じなので、 符号なしオペランドに対しても使用できる。 ただし、 CF および OF フ ラグを使用して、 結果の上位半分が非ゼロであるかど うかを判定する こ と はできない。 操作 IF (NumberOfOperands = 1) THEN IF (OperandSize = 8) THEN AX ← AL ∗ SRC (* signed multiplication *) IF ((AH = 00H) OR (AH = FFH)) THEN CF = 0; OF = 0; ELSE CF = 1; OF = 1; FI; ELSE IF OperandSize = 16 THEN DX:AX ← AX ∗ SRC (* signed multiplication *) IF ((DX = 0000H) OR (DX = FFFFH)) THEN CF = 0; OF = 0; ELSE CF = 1; OF = 1; FI; ELSE (* OperandSize = 32 *) EDX:EAX ← EAX ∗ SRC (* signed multiplication *) IF ((EDX = 00000000H) OR (EDX = FFFFFFFFH)) THEN CF = 0; OF = 0; ELSE CF = 1; OF = 1; FI; FI; ELSE IF (NumberOfOperands = 2) THEN temp ← DEST ∗ SRC (* signed multiplication; temp is double DEST size*) DEST ← DEST ∗ SRC (* signed multiplication *) IF temp ≠ DEST THEN CF = 1; OF = 1; ELSE CF = 0; OF = 0; FI; FI; FI; ELSE (* NumberOfOperands = 3 *) DEST ← SRC1 ∗ SRC2 (* signed multiplication *) temp ← SRC1 ∗ SRC2 (* signed multiplication; temp is double SRC1 size *) IF temp ≠ DEST THEN CF = 1; OF = 1; ELSE CF = 0; OF = 0; FI; 3:574 第 3 巻 : IA-32 基本命令リファレンス
IMUL—Signed Multiply ( 続き ) 影響を受けるフラグ この命令の1 オペラ ン ド 形式では、 結果の上位半分への有効ビ ッ ト のキ ャ リ ー がある と きに CF および OF フ ラ グがセ ッ ト さ れ、 結果が結果の下位半分に収 ま る と き は ク リ ア さ れる。 命令の 2 および 3 オペラン ド形式では、 デステ ィ ネーシ ョ ン ・ オペラン ド ・ サイ ズに合わせるために結果を切り捨てなければならないと きは CF および OF フラグがセッ トされ、 結果がデスティネーション・オペランド ・サイズに収まるときはクリアされる。 SF、 ZF、 AF、 PF フ ラ グは未定義。 追加の Itanium ベース・システム環境例外 Itanium アーキテクチャ ・ レジスタ ・ フォルト Itanium アーキテクチャ ・ メモリ ・ フォル ト NaT レ ジ ス タ参照アボ ー ト 。 VHPT データ ・ フォル ト、 ネス ト された TLB フォルト、 データ TLB フォルト、 代替データTLB フォルト、 デー タ・ページ不在フォルト、 データNaT ページ参照アボー ト、 データ・キー・ ミス・フォルト、 データ・キー許可 フォルト、 データ・アクセス権フォルト、 データ・アクセ ス・ビット ・フォルト、 データ・ダーティ ・ビット ・フォ ルト。 保護モード例外 #GP(0) メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 DS、 ES、 FS、 または GS レジスタを使用してメモリがア クセスされ、 レジスタの内容が NULL セグメン ト ・ セレ クタであった場合。 #SS(0) メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 #PF ( フォルト ・コード ) ペー ジ ・ フ ォ ル ト が発生した場合。 #AC(0) 現行特権レベルが 3 のときに、 アライメント ・チェックが イネーブルにされていて、 アライメントが合わないメモリ 参照が行われた場合。 実アドレス・モード例外 #GP メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 #SS メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 第 3 巻 : IA-32 基本命令リファレンス 3:575
- 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 542 und 543: FSCALE—Scale オペコード 命
- 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 588 und 589: IMUL—Signed Multiply ( 続き )
- Seite 590 und 591: IN—Input from Port ( 続き ) 操
- Seite 592 und 593: INC—Increment by 1 オペコー
- Seite 594 und 595: INS/INSB/INSW/INSD—Input from Por
- Seite 596 und 597: INS/INSB/INSW/INSD—Input from Por
- Seite 598 und 599: INT n/INTO/INT 3—Call to Interrup
- Seite 600 und 601: INT n/INTO/INT 3—Call to Interrup
- Seite 602 und 603: INT n/INTO/INT 3—Call to Interrup
- Seite 604 und 605: INT n/INTO/INT 3—Call to Interrup
- Seite 606 und 607: INT n/INTO/INT 3—Call to Interrup
- Seite 608 und 609: INT n/INTO/INT 3—Call to Interrup
- Seite 610 und 611: INVD—Invalidate Internal Caches (
- Seite 612 und 613: IRET/IRETD—Interrupt Return オ
- Seite 614 und 615: IRET/IRETD—Interrupt Return ( 続
- Seite 616 und 617: IRET/IRETD—Interrupt Return ( 続
- Seite 618 und 619: IRET/IRETD—Interrupt Return ( 続
- Seite 620 und 621: Jcc—Jump if Condition Is Met オ
- Seite 622 und 623: Jcc—Jump if Condition Is Met (
- Seite 624 und 625: JMP—Jump オペコード 命令
- Seite 626 und 627: JMP—Jump ( 続き ) 操作 IF nea
- Seite 628 und 629: JMP—Jump ( 続き ) END; TASK-GAT
- Seite 630 und 631: JMP—Jump ( 続き ) #PF ( フォ
- Seite 632 und 633: JMPE—Jump to Intel ® Itanium ®
- Seite 634 und 635: LAR—Load Access Rights Byte オ
IMUL—Signed Multiply ( 続き )<br />
2 および 3 オペラン ド 形式には、 積の下位半分は両オペラン ド の符号のあ りなしに関係<br />
なく同じなので、 符号なしオペランドに対しても使用できる。 ただし、 CF および OF フ<br />
ラグを使用して、 結果の上位半分が非ゼロであるかど うかを判定する こ と はできない。<br />
操作<br />
IF (NumberOfOperands = 1)<br />
THEN IF (OperandSize = 8)<br />
THEN<br />
AX ← AL ∗ SRC (* signed multiplication *)<br />
IF ((AH = 00H) OR (AH = FFH))<br />
THEN CF = 0; OF = 0;<br />
ELSE CF = 1; OF = 1;<br />
FI;<br />
ELSE IF OperandSize = 16<br />
THEN<br />
DX:AX ← AX ∗ SRC (* signed multiplication *)<br />
IF ((DX = 0000H) OR (DX = FFFFH))<br />
THEN CF = 0; OF = 0;<br />
ELSE CF = 1; OF = 1;<br />
FI;<br />
ELSE (* OperandSize = 32 *)<br />
EDX:EAX ← EAX ∗ SRC (* signed multiplication *)<br />
IF ((EDX = 00000000H) OR (EDX = FFFFFFFFH))<br />
THEN CF = 0; OF = 0;<br />
ELSE CF = 1; OF = 1;<br />
FI;<br />
FI;<br />
ELSE IF (NumberOfOperands = 2)<br />
THEN<br />
temp ← DEST ∗ SRC (* signed multiplication; temp is double DEST size*)<br />
DEST ← DEST ∗ SRC (* signed multiplication *)<br />
IF temp ≠ DEST<br />
THEN CF = 1; OF = 1;<br />
ELSE CF = 0; OF = 0;<br />
FI;<br />
FI;<br />
FI;<br />
ELSE (* NumberOfOperands = 3 *)<br />
DEST ← SRC1 ∗ SRC2 (* signed multiplication *)<br />
temp ← SRC1 ∗ SRC2 (* signed multiplication; temp is double SRC1 size *)<br />
IF temp ≠ DEST<br />
THEN CF = 1; OF = 1;<br />
ELSE CF = 0; OF = 0;<br />
FI;<br />
3:574 第 3 巻 : IA-32 基本命令リファレンス