24531904_j
24531904_j 24531904_j
OUTS/OUTSB/OUTSW/OUTSD—Output String to Port オペコード 命令 説明 6E OUTS DX, DS:(E)SI アドレス DS:(E)SI のバイトを DX の I/O ポートに出力する。 6F OUTS DX, DS:SI アドレス DS:SI のワードを DX の I/O ポートに出力する。 6F OUTS DX, DS:ESI アドレス DS:ESI のダブルワードを DX の I/O ポートに出力する。 6E OUTSB アドレス DS:(E)SI のバイトを DX の I/O ポートに出力する。 6F OUTSW アドレス DS:SI のワードを DX の I/O ポートに出力する。 6F OUTSD アドレス DS:ESI のダブルワードを DX の I/O ポートに出力する。 説明 これらの命令は、 データを第2 オペラン ド ( ソース・ オペランド ) から第1 オペラン ド ( デステ ィ ネーシ ョ ン ・ オペラン ド ) で指定された I/O ポー トにコピーする。 ソース ・ オペ ランドは、 アド レス DS:ESI のメモリ ・ロケーションである( オペラン ド ・ サイズ属性が 16 の場合は、 SI レジスタがソース ・ インデックス ・ レジスタとして使用される )。 DS セグメ ントをセグメント ・オーバライド ・プリフィックスでオーバライドすることができる。 デステ ィ ネーシ ョ ン ・ オペラン ド は、 I/O ポー ト ・アドレス 0 ~ 65535 にアクセスできる ように、 DX レジスタでなければならない。 8 ビットのI/O ポー トにアクセスする場合 は、 ポー ト ・ サイズはオペコ ー ド に よ って決ま る。 16 ビッ トまたは32 ビッ トのI/O ポー トにアクセスする場合は、 ポート ・サイズはオペランド ・サイズ属性によって決まる。 OUTSB、 OUTSW、 OUTSD ニーモニッ クは、 それぞれ OUTS 命令のバイ ト 版、 ワ ー ド 版、 ダブルワ ー ド 版のシ ノ ニムであ る (OUTS 命令では、 命令の中で "DS:ESI" を明示的 に指定しなければならない )。 バイ ト、 ワー ド、 またはダブルワー ドがメモリ ・ ロケーシ ョ ンから I/O ポ ー ト に転送 さ れた後、 ESI レジスタは EFLAGS レジスタ内のDF フラグの設定に従って自動的にイン クリメントまたはデクリメントされる。 (DF フラグが0 である場合は、 ESI レジスタは インク リ メン ト される。 DF フラグが1 である場合は、 ESI レジスタはデクリメント され る。 ) ESI レ ジ ス タ は、 バイ ト 操作の場合は 1、 ワー ド操作の場合は 2、 ダブルワー ド操 作の場合は 4、 それぞれインク リ メン ト またはデク リ メン ト される。 OUTS、 OUTSB、 OUTSW、 OUTSD 命令は、 前に REP プリフィックスを付けると、 ECX バイ ト、 ワー ド、 またはダブルワー ドのブロ ッ ク入力を行える。 REP プリフィックスの 説明については、 3:713 ページの 「REP/REPE/REPZ/REPNE/REPNZ—Repeat String Operation Prefix」 を参照のこ と。 OUTS、 OUTSB、 OUTSW、 または OUTSD 命令の実行後、 プ ロ セ ッ サは、 OUT トランザ ク シ ョ ンの完了を確認してか ら、 次の命令の実行を開始する。 ただし、 OUT トランザク シ ョ ンが ま だ完了していな く て も 、 次の命令がプ リ フ ェ ッ チ さ れる場合がある。 この命令は、 プロセッサのI/O アドレス空間にあるI/O ポー トのアクセスだけに有用であ る。 I/O トランザクションは、すべての先行するデータ・メモリ操作の後で実行される。これ 以降のデータ・メモリ操作は、I/O トランザクションを通ることができない。 Itanium ベース・システム環境では、I/O ポートの参照は、IOBase レジスタで指定される 64 ビット仮想アドレスに、4K バイト仮想ページ当たり 4 ポートずつマッピングされる。 オペレーティング・システムは、Itanium アーキテクチャの TLB を利用して、任意の 4 つ の I/O ポートへのアクセス許可を付与または拒否できる。I/O ポート空間は、オペレーティ ング・システム・コードによって、任意の 64 ビット物理メモリ・ロケーションにマッピ ングされる。CFLG.io = 1 かつ CPL > IOPL の場合は、TSS を参照して、I/O 許可を与える かどうかを決定する。CFLG.io = 0 または CPL
OUTS/OUTSB/OUTSW/OUTSD—Output String to Port ( 続き ) 参照される I/O ポートが (I/O ベース・レジスタを介して ) 実装されていない仮想アドレ スにマッピングされる場合や、データ変換がディスエーブル (PSR.dt = 0) になっている 場合は、その I/O ポートを参照する OUTS 命令を発行すると、GPFault が発生する。 操作 IF ((PE = 1) AND ((VM = 1) OR (CPL > IOPL))) THEN (* Protected mode or virtual-8086 mode with CPL > IOPL *) IF (CFLG.io AND Any I/O Permission Bit for I/O port being accessed = 1) THEN #GP(0); FI; ELSE ( * I/O operation is allowed *) FI; IF (Itanium_System_Environment) THEN DEST_VA = IOBase | (Port{15:2}
- 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 658 und 659: 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 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
- Seite 708 und 709: PUSH—Push Word or Doubleword onto
- Seite 710 und 711: PUSH—Push Word or Doubleword onto
- Seite 712 und 713: PUSHA/PUSHAD—Push All General-Pur
- Seite 714 und 715: PUSHF/PUSHFD—Push EFLAGS Register
- Seite 716 und 717: RCL/RCR/ROL/ROR-—Rotate ( 続き
- Seite 718 und 719: RCL/RCR/ROL/ROR-—Rotate ( 続き
- Seite 720 und 721: RDMSR—Read from Model Specific Re
- Seite 722 und 723: RDPMC—Read Performance-Monitoring
- Seite 724 und 725: RDTSC—Read Time-Stamp Counter (
- Seite 726 und 727: REP/REPE/REPZ/REPNE /REPNZ—Repeat
- Seite 728 und 729: RET—Return from Procedure オペ
- Seite 730 und 731: RET—Return from Procedure ( 続
- Seite 732 und 733: RET—Return from Procedure ( 続
- Seite 734 und 735: ROL/ROR—Rotate 「RCL/RCR/ROL/ROR
- Seite 736 und 737: SAHF—Store AH into Flags オペ
- Seite 738 und 739: SAL/SAR/SHL/SHR—Shift ( 続き )
- Seite 740 und 741: SAL/SAR/SHL/SHR—Shift ( 続き )
- Seite 742 und 743: SBB—Integer Subtraction with Borr
OUTS/OUTSB/OUTSW/OUTSD—Output String to Port ( 続き )<br />
参照される I/O ポートが (I/O ベース・レジスタを介して ) 実装されていない仮想アドレ<br />
スにマッピングされる場合や、データ変換がディスエーブル (PSR.dt = 0) になっている<br />
場合は、その I/O ポートを参照する OUTS 命令を発行すると、GPFault が発生する。<br />
操作<br />
IF ((PE = 1) AND ((VM = 1) OR (CPL > IOPL)))<br />
THEN (* Protected mode or virtual-8086 mode with CPL > IOPL *)<br />
IF (CFLG.io AND Any I/O Permission Bit for I/O port being accessed = 1)<br />
THEN #GP(0);<br />
FI;<br />
ELSE ( * I/O operation is allowed *)<br />
FI;<br />
IF (Itanium_System_Environment) THEN<br />
DEST_VA = IOBase | (Port{15:2}