24531904_j
24531904_j 24531904_j
LODS/LODSB/LODSW/LODSD—Load String ( 続き ) 仮想 8086 モード例外 #GP(0) メモリ ・ オペランドの実効アドレスが CS、 DS、 ES、 FS、 または GS セグ メ ン ト の範囲外の場合。 #SS(0) メモリ ・ オペランドの実効アドレスが SS セグメン ト の範 囲外の場合。 #PF ( フォルト ・コード ) ペー ジ ・ フ ォ ル ト が発生した場合。 #AC(0) アライメン ト ・ チェ ッ クがイネーブルにされていて、 アラ イ メン ト が合わないメモ リ 参照が行われた場合。 3:646 第 3 巻 : IA-32 基本命令リファレンス
LOOP/LOOPcc—Loop According to ECX Counter オペコード 命令 説明 E2 cb LOOP rel8 カウントをデクリメントし、カウント ≠ 0 の場合 short ジャンプす る。 E1 cb LOOPE rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=1 の場合 short ジャンプする。 E1 cb LOOPZ rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=1 の場合 short ジャンプする。 E0 cb LOOPNE rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=0 の場合 short ジャンプする。 E0 cb LOOPNZ rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=0 の場合 short ジャンプする。 説明 ECX または CX レジスタをカウンタ と して使用して、 ループ操作を実行する。 LOOP 命令 が実行されるたびに、 カ ウ ン ト ・ レ ジス タが 1 デク リ メント され、 次に 0 かどうかチェ ッ クされる。 カウントが0 である場合は、 ループは終了し、 LOOP 命令の次の命令から プロ グラムの実行が継続される。 カウン トが 0 でない場合は、 デステ ィ ネーシ ョ ン ( ターゲッ ト ) オペラン ド への near ジャンプが行われる。 ターゲットはおそら くループの先頭であ る。 ア ド レス ・ サイズ属性が 32 ビッ トである場合は、 カウント ・レジスタとしてECX レ ジスタが使用される。 そうでない場合は、 CX レジスタが使用される。 ターゲッ ト命令は相対オフセット (EIP レジスタ内の命令ポインタの現在値に相対的な符 号付き オ フ セ ッ ト ) で指定される。 相対オフセ ッ ト は、 アセンブ リ ・ コ ー ド では一般的 にラベルとして指定されるが、 マシン ・ コー ド ・ レベルでは、 符号付きの 8 ビッ ト即値 と して コ ー ド 化され、 命令ポ イ ン タ に加算される。 こ の命令には、 -128 ~ +127 までの オフセッ トが使用できる。 ループ命令(LOOPcc) の一部の形式では、 カ ウ ン ト が 0 に達する前にループを終了させ る ための条件 と して ZF フ ラ グ も 指定で き る。 それ ら の形式の命令に は、 各命令に条件 コード (cc) が対応してお り、 それぞれにテス ト される条件を示している。 その場合、 LOOPcc 命令その も のは ZF フラグの状態を変えない。 ZF フ ラ グを変更す る のは、 ルー プ内の他の命令である。 すべての分岐は、 ジ ャンプ ・ ア ド レスやキャ ッ シュの可否に関係な く 、 1 つまたは 2 つ のキャ ッシュ ・ ラインのコ ー ド ・ フ ェ ッチに変換される。 操作 IF AddressSize = 32 THEN Count is ECX; ELSE (* AddressSize = 16 *) Count is CX; FI; Count ← Count - 1; IF instruction in not LOOP THEN IF (instruction = LOOPE) OR (instruction = LOOPZ) THEN IF (ZF =1) AND (Count ≠ 0) THEN BranchCond ← 1; ELSE BranchCond ← 0; 第 3 巻 : IA-32 基本命令リファレンス 3:647
- 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 オ
- Seite 636 und 637: LAR—Load Access Rights Byte ( 続
- Seite 638 und 639: LDS/LES/LFS/LGS/LSS—Load Far Poin
- Seite 640 und 641: LEA—Load Effective Address オペ
- Seite 642 und 643: LEAVE—High Level Procedure Exit
- Seite 644 und 645: LES—Load Full Pointer 「LDS/LES/
- Seite 646 und 647: LGDT/LIDT—Load Global/Interrupt D
- Seite 648 und 649: LGS—Load Full Pointer 「LDS/LES/
- Seite 650 und 651: LLDT—Load Local Descriptor Table
- Seite 652 und 653: LMSW—Load Machine Status Word オ
- Seite 654 und 655: LOCK—Assert LOCK# Signal Prefix
- Seite 656 und 657: LODS/LODSB/LODSW/LODSD—Load Strin
- Seite 660 und 661: LOOP/LOOPcc—Loop According to ECX
- Seite 662 und 663: LSL—Load Segment Limit ( 続き )
- Seite 664 und 665: LSS—Load Full Pointer 「LDS/LES/
- Seite 666 und 667: LTR—Load Task Register ( 続き )
- Seite 668 und 669: MOV—Move ( 続き ) デスティ
- Seite 670 und 671: MOV—Move ( 続き ) #GP( セレ
- Seite 672 und 673: MOV—Move to/from Control Register
- Seite 674 und 675: MOV—Move to/from Debug Registers
- Seite 676 und 677: MOVS/MOVSB/MOVSW/MOVSD—Move Data
- Seite 678 und 679: MOVSX—Move with Sign-Extension
- Seite 680 und 681: MOVZX—Move with Zero-Extend オ
- Seite 682 und 683: MUL—Unsigned Multiplication of AL
- Seite 684 und 685: NEG—Two's Complement Negation オ
- Seite 686 und 687: NOP—No Operation オペコード
- Seite 688 und 689: NOT—One's Complement Negation (
- Seite 690 und 691: OR—Logical Inclusive OR ( 続き
- Seite 692 und 693: OUT—Output to Port ( 続き ) 操
- Seite 694 und 695: OUTS/OUTSB/OUTSW/OUTSD—Output Str
- Seite 696 und 697: OUTS/OUTSB/OUTSW/OUTSD—Output Str
- Seite 698 und 699: POP—Pop a Value from the Stack
- Seite 700 und 701: POP—Pop a Value from the Stack (
- Seite 702 und 703: POP—Pop a Value from the Stack (
- Seite 704 und 705: POPA/POPAD—Pop All General-Purpos
- Seite 706 und 707: POPF/POPFD—Pop Stack into EFLAGS
LOOP/LOOPcc—Loop According to ECX Counter<br />
オペコード 命令 説明<br />
E2 cb LOOP rel8 カウントをデクリメントし、カウント ≠ 0 の場合 short ジャンプす<br />
る。<br />
E1 cb LOOPE rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=1 の場合 short<br />
ジャンプする。<br />
E1 cb LOOPZ rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=1 の場合 short<br />
ジャンプする。<br />
E0 cb LOOPNE rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=0 の場合 short<br />
ジャンプする。<br />
E0 cb LOOPNZ rel8 カウントをデクリメントし、カウント ≠ 0 でかつ ZF=0 の場合 short<br />
ジャンプする。<br />
説明<br />
ECX または CX レジスタをカウンタ と して使用して、 ループ操作を実行する。 LOOP 命令<br />
が実行されるたびに、 カ ウ ン ト ・ レ ジス タが 1 デク リ メント され、 次に 0 かどうかチェ ッ<br />
クされる。 カウントが0 である場合は、 ループは終了し、 LOOP 命令の次の命令から プロ<br />
グラムの実行が継続される。 カウン トが 0 でない場合は、 デステ ィ ネーシ ョ ン ( ターゲッ<br />
ト ) オペラン ド への near ジャンプが行われる。 ターゲットはおそら くループの先頭であ<br />
る。 ア ド レス ・ サイズ属性が 32 ビッ トである場合は、 カウント ・レジスタとしてECX レ<br />
ジスタが使用される。 そうでない場合は、 CX レジスタが使用される。<br />
ターゲッ ト命令は相対オフセット (EIP レジスタ内の命令ポインタの現在値に相対的な符<br />
号付き オ フ セ ッ ト ) で指定される。 相対オフセ ッ ト は、 アセンブ リ ・ コ ー ド では一般的<br />
にラベルとして指定されるが、 マシン ・ コー ド ・ レベルでは、 符号付きの 8 ビッ ト即値<br />
と して コ ー ド 化され、 命令ポ イ ン タ に加算される。 こ の命令には、 -128 ~ +127 までの<br />
オフセッ トが使用できる。<br />
ループ命令(LOOPcc) の一部の形式では、 カ ウ ン ト が 0 に達する前にループを終了させ<br />
る ための条件 と して ZF フ ラ グ も 指定で き る。 それ ら の形式の命令に は、 各命令に条件<br />
コード (cc) が対応してお り、 それぞれにテス ト される条件を示している。 その場合、<br />
LOOPcc 命令その も のは ZF フラグの状態を変えない。 ZF フ ラ グを変更す る のは、 ルー<br />
プ内の他の命令である。<br />
すべての分岐は、 ジ ャンプ ・ ア ド レスやキャ ッ シュの可否に関係な く 、 1 つまたは 2 つ<br />
のキャ ッシュ ・ ラインのコ ー ド ・ フ ェ ッチに変換される。<br />
操作<br />
IF AddressSize = 32<br />
THEN<br />
Count is ECX;<br />
ELSE (* AddressSize = 16 *)<br />
Count is CX;<br />
FI;<br />
Count ← Count - 1;<br />
IF instruction in not LOOP<br />
THEN<br />
IF (instruction = LOOPE) OR (instruction = LOOPZ)<br />
THEN<br />
IF (ZF =1) AND (Count ≠ 0)<br />
THEN BranchCond ← 1;<br />
ELSE BranchCond ← 0;<br />
第 3 巻 : IA-32 基本命令リファレンス 3:647