24531904_j

24531904_j 24531904_j

16.02.2013 Aufrufe

• レ ジ ス タ名は暗黙に レ ジ ス タ の内容を意味する。 ブ ラ ケ ッ ト で囲 ま れたレ ジ ス タ名 は、 暗黙に、 アド レスがそのレジスタにストアされているロケーションの内容を意 味する。 例えば、 ES:[DI] は、 ES セグメン ト相対アド レスがレジスタ DI にス トアさ れている ロ ケ ーシ ョ ンの内容を示す。 [SI] は、 レジスタ SI にス トアされている、 SI のデフ ォル ト ・ セグメン ト (DS) またはオーバライド されたセグメントの相対アドレ スの内容を示す。 • 例えば (E)SI のよ うに、 汎用レジスタ名の中で "E" がかっ こで囲まれているのは、 現 在のア ド レ ス ・ サイズ属性が 16 である場合はオフセッ ト が SI レジスタから読み込 まれ、 アド レス ・ サイズ属性が 32 である場合は ESI レジスタから読み込まれること を示す。 • ブラケ ッ ト はメモ リ ・ オペラン ド に対しても使用され、 その場合は、 メモ リ ・ ロ ケ ー シ ョ ンの内容がセグ メ ン ト 相対オ フ セ ッ ト である こ と を意味す る。 例えば、 [SRC] はソース ・ オペランドの内容がセグメント相対オフセットであることを示す。 • A ← B; は、 B の値が A に代入される こ と を示す。 • 記号 =、 ≠、 ≧、 ≦は 2 つの値の比較に使用される関係演算子であ り 、 それぞれ、 「等しい」、 「等し く ない」、 「 よ り 大き いか等しい」、 「 よ り 小 さ いか等しい」 を意味す る。 例えば、 関係式 A=B は、 A の値が B に等しい場合は TRUE ( 真 ) であり、 そ う でない場合は FALSE ( 偽 ) である。 • 式 "> COUNT" は、 デステ ィ ネーシ ョ ン ・ オペラン ド がカウン ト ・ オペラン ド が示すビッ ト 数だけそれぞれ左または右にシフ ト されるこ と を示す。 以下の識別子が、 アルゴ リ ズムの記述に使用 さ れる。 • OperandSize と AddressSize - OperandSize 識別子は、 16 ビッ トか32 ビッ トの命令 のオペラン ド ・ サイズ属性を表す。 AddressSize 識別子は、 16 ビッ トか32 ビットの ア ド レ ス ・ サ イ ズ属性を表す。 例えば、 以下の疑似 コ ー ド は、 オペラ ン ド ・ サイ ズ 属性が使用 さ れる CMPS 命令の フ ォ ー マ ッ ト に依存す る こ と を示している。 F instruction = CMPSW THEN OperandSize ← 16; ELSE IF instruction = CMPSD THEN OperandSize ← 32; FI; FI; こ れ ら の属性の決定方法の一般的ガ イ ド ラ イ ン については、 『IA-32 インテル ® アー キテクチャ ・ ソフ ト ウェア ・ ディベロッパーズ ・ マニュアル、 上巻』 第 3 章の 「オ ペラン ド ・ サイズ属性とアド レス ・ サイズ属性」 を参照のこ と。 • StackAddrSize - 命令に関連す る ス タ ッ ク のア ド レ ス ・ サイ ズ属性を表す。 こ の属性 の値は 16 または 32 ビッ トである( 『IA-32 インテル ® アーキテクチャ ・ ソフ ト ウェ ア・ディベロッパーズ・マニュアル、 上巻』 第 4 章の 4.2.3 項 「スタッ ク ・ アクセス におけ る ア ド レ ス ・ サ イ ズ属性」 を参照のこ と )。 • SRC - ソース ・オペランドを表す。 • DEST - デステ ィ ネーシ ョ ン ・ オペラン ド を表す。 以下の関数が、 アルゴ リ ズムの記述に使用 さ れる。 • ZeroExtend ( 値 ) - 命令のオペラ ン ド ・ サイ ズ属性に合わせたゼ ロ拡張値を返す。 例 えば、 オペラ ン ド ・ サ イ ズ属性が 32 である場合は、 -10 のバイ ト 値をゼロ拡張する と、 そのバイト は F6H からダブルワー ド値000000F6H に変換される。 ZeroEztend 関 数に渡された値と オペラ ン ド ・ サイズ属性が同じサイズである場合は、 ZeroExtend はその値を変えずにそのまま返す。 3:376 第 3 巻 : IA-32 基本命令リファレンス

• SignExtend ( 値 ) - 命令のオペラ ン ド ・ サイズ属性に合わせた符号拡張値を返す。 例 えば、 オペラ ン ド ・ サ イ ズ属性が 32 である場合は、 内容が値 -10 であるバイ ト を符 号拡張す る と 、 そのバイ ト は F6H からダブルワード値FFFFFFF6H に変換される。 SignEztend 関数に渡された値 と オペラ ン ド ・ サ イ ズ属性 と が同じ サ イ ズである場合 は、 SignExtend はその値を変えずにそのまま返す。 • SaturateSignedWordToSignedByte - 符号付き 16 ビ ッ ト 値を符号付き 8 ビット値に変 換する。 符号付き 16 ビット値が-128 より小さい場合は、 その値は飽和値-128 (80H) で表される。 127 よ り 大き い場合は、 飽和値 127 (7FH) で表される。 • SaturateSignedDWordToSignedWord - 符号付き 32 ビ ッ ト 値を符号付き 16 ビッ ト値 に変換す る。 符号付き 32 ビッ ト値が-32768 よ り 小 さ い場合は、 その値は飽和値 -32768 (8000H) で表される。 32767 よ り 大き い場合は、 飽和値 32767 (7FFFH) で表さ れる。 • SaturateSignedWordToUnsignedByte - 符号付き 16 ビッ ト値を符号なし8ビッ ト値 に変換す る。 符号付き 16 ビッ ト値が0 よ り 小 さ い場合は、 その値は飽和値 0 (00H) で表される。 255 よ り 大き い場合は、 飽和値 255 (FFH) で表される。 • SaturateToSignedByte - 演算の結果を符号付き 8 ビ ッ ト 値と して表す。 結果が -128 より小さい場合は、 その値は飽和値-128 (80H) で表される。 127 より大きい場合は、 飽和値 127 (7FH) で表される。 • SaturateToSignedWord - 演算の結果を符号付き 16 ビ ッ ト 値 と して表す。 結果が -32768 より小さい場合は、 その値は飽和値-32768 (8000H) で表される。 32767 より大 き い場合は、 飽和値 32767 (7FFFH) で表される。 • SaturateToUnsignedByte - 演算の結果を符号なし 8 ビ ッ ト 値 と して表す。 結果が 0 より小さい場合は、 その値は飽和値0 (00H) で表される。 255 より大きい場合は、 飽 和値 255 (FFH) で表される。 • SaturateToUnsignedWord - 演算の結果を符号なし 16 ビ ッ ト 値と して表す。 結果が 0 より小さい場合は、 その値は飽和値0 (00H) で表される。 65535 より大きい場合は、 飽和値 65535 (FFFFH) で表される。 • LowOrderWord (DEST * SRC) - ワード・オペランドにワード・オペランドを掛け、 ダブルワードの結果の下位ワードをデスティネーション・オペランドにストアする。 • HighOrderWord (DEST * SRC) - ワード ・オペランドにワード ・ オペランドを掛け、 ダブルワードの結果の上位ワードをデスティネーション・オペランドにストアする。 • Push ( 値 ) - 値をスタ ッ ク にプ ッ シュする。 プ ッ シュ されるバイ ト 数は命令のオペラ ンド ・サイズ属性によって決まる。 • Pop() - 一番上のス タ ッ ク か ら値を削除し、 その値を返す。 文 EAX ← Pop(); は、 一番 上のス タ ッ ク か ら 32 ビット値をEAX に代入する。 Pop は、 オペラン ド ・ サイズ属 性に応じて、 ワ ー ド かダブルワ ー ド を返す。 • PopRegisterStack - FPU の ST(0) レジスタを空としてマークし、 FPU レジスタ ・ ス タック ・ポインタ(TOP) を 1 だけインク リ メン ト する。 • Switch-Tasks - タスク ・ スイッチを行う。 • Bit(BitBase, BitOffset) - メモリまたはレジスタ内の一連のビットであるビット・スト リング内の特定ビットの値を返す。 ビットには、 レジスタ内またはメモリ ・バイト 内で下位か ら上位に番号が割り振られている。 ベー ス ・ オペラン ド がレ ジス タであ る場合は、 存在可能なオ フ セ ッ ト の範囲は 0 ~ 31 である。 このオフセッ ト は、 指定 されたレジスタ内のビッ ト のアド レスを指定する。 例として、 図 1-1 に関数 Bit[EAX,21] の図解を示す。 第 3 巻 : IA-32 基本命令リファレンス 3:377

• レ ジ ス タ名は暗黙に レ ジ ス タ の内容を意味する。 ブ ラ ケ ッ ト で囲 ま れたレ ジ ス タ名<br />

は、 暗黙に、 アド レスがそのレジスタにストアされているロケーションの内容を意 味する。 例えば、 ES:[DI] は、 ES セグメン ト相対アド レスがレジスタ DI にス トアさ<br />

れている ロ ケ ーシ ョ ンの内容を示す。 [SI] は、 レジスタ SI にス トアされている、 SI<br />

のデフ ォル ト ・ セグメン ト (DS) またはオーバライド されたセグメントの相対アドレ スの内容を示す。<br />

• 例えば (E)SI のよ うに、 汎用レジスタ名の中で "E" がかっ こで囲まれているのは、 現<br />

在のア ド レ ス ・ サイズ属性が 16 である場合はオフセッ ト が SI レジスタから読み込<br />

まれ、 アド レス ・ サイズ属性が 32 である場合は ESI レジスタから読み込まれること<br />

を示す。<br />

• ブラケ ッ ト はメモ リ ・ オペラン ド に対しても使用され、 その場合は、 メモ リ ・ ロ<br />

ケ ー シ ョ ンの内容がセグ メ ン ト 相対オ フ セ ッ ト である こ と を意味す る。 例えば、<br />

[SRC] はソース ・ オペランドの内容がセグメント相対オフセットであることを示す。 • A ← B; は、 B の値が A に代入される こ と を示す。<br />

• 記号 =、 ≠、 ≧、 ≦は 2 つの値の比較に使用される関係演算子であ り 、 それぞれ、<br />

「等しい」、 「等し く ない」、 「 よ り 大き いか等しい」、 「 よ り 小 さ いか等しい」 を意味す<br />

る。 例えば、 関係式 A=B は、 A の値が B に等しい場合は TRUE ( 真 ) であり、 そ う<br />

でない場合は FALSE ( 偽 ) である。<br />

• 式 "> COUNT" は、 デステ ィ ネーシ ョ ン ・ オペラン ド がカウン ト ・<br />

オペラン ド が示すビッ ト 数だけそれぞれ左または右にシフ ト されるこ と を示す。<br />

以下の識別子が、 アルゴ リ ズムの記述に使用 さ れる。<br />

• OperandSize と AddressSize - OperandSize 識別子は、 16 ビッ トか32 ビッ トの命令<br />

のオペラン ド ・ サイズ属性を表す。 AddressSize 識別子は、 16 ビッ トか32 ビットの<br />

ア ド レ ス ・ サ イ ズ属性を表す。 例えば、 以下の疑似 コ ー ド は、 オペラ ン ド ・ サイ ズ<br />

属性が使用 さ れる CMPS 命令の フ ォ ー マ ッ ト に依存す る こ と を示している。<br />

F instruction = CMPSW<br />

THEN OperandSize ← 16;<br />

ELSE<br />

IF instruction = CMPSD<br />

THEN OperandSize ← 32;<br />

FI;<br />

FI;<br />

こ れ ら の属性の決定方法の一般的ガ イ ド ラ イ ン については、 『IA-32 インテル ® アー<br />

キテクチャ ・ ソフ ト ウェア ・ ディベロッパーズ ・ マニュアル、 上巻』 第 3 章の 「オ<br />

ペラン ド ・ サイズ属性とアド レス ・ サイズ属性」 を参照のこ と。<br />

• StackAddrSize - 命令に関連す る ス タ ッ ク のア ド レ ス ・ サイ ズ属性を表す。 こ の属性<br />

の値は 16 または 32 ビッ トである( 『IA-32 インテル ® アーキテクチャ ・ ソフ ト ウェ<br />

ア・ディベロッパーズ・マニュアル、 上巻』 第 4 章の 4.2.3 項 「スタッ ク ・ アクセス<br />

におけ る ア ド レ ス ・ サ イ ズ属性」 を参照のこ と )。<br />

• SRC - ソース ・オペランドを表す。<br />

• DEST - デステ ィ ネーシ ョ ン ・ オペラン ド を表す。<br />

以下の関数が、 アルゴ リ ズムの記述に使用 さ れる。<br />

• ZeroExtend ( 値 ) - 命令のオペラ ン ド ・ サイ ズ属性に合わせたゼ ロ拡張値を返す。 例<br />

えば、 オペラ ン ド ・ サ イ ズ属性が 32 である場合は、 -10 のバイ ト 値をゼロ拡張する<br />

と、 そのバイト は F6H からダブルワー ド値000000F6H に変換される。 ZeroEztend 関<br />

数に渡された値と オペラ ン ド ・ サイズ属性が同じサイズである場合は、 ZeroExtend<br />

はその値を変えずにそのまま返す。<br />

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!