1.7. 64 ビットモードの一般的規則
2.1. 命令リファレンス・ページの読み方
2.1.3.1. IA-32e モードでの操作
「IA-32eモードでの操作」の項では、レガシーの
IA-32
モードとは異なる64
ビットモー ドでの命令の動作について説明する。図2-1. BIT[EAX,21]のビット・オフセット
図2-2. メモリビットのインデックス操作
0 21
31
BitOffset ←
BitBase + 1
0 7
7
7 5 0 0
BitBase − 2
0 7
7
7 0 0 5
BitBase BitBase − 1 BitOffset ←
BitOffset ← BitBase − 1 BitBase
2.1.4.
影響を受けるフラグ「影響を受けるフラグ」の項には、命令の影響を受ける
EFLAGS
レジスタのフラグを 示す。フラグはクリアされたときは0
に等しく、セットされたときは1
に等しい。算 術演算および論理演算命令は、通常、一定の方法で値をステータス・フラグに代入す る(詳細については『IA-32インテル®アーキテクチャ・ソフトウェア・デベロッパー
ズ・マニュアル、上巻』の付録A「EFLAGS クロス・リファレンス」を参照のこと)
。「操作」の項では、非従来型の代入について説明している。未定義として示してある フラグの値は、不確定な方法で変更される場合がある。記載されていないフラグは命 令によって変更されない。
2.1.5.
影響を受けるFPU
フラグ浮動小数点命令については、「影響を受ける
FPU
フラグ」の項があり、そこで、各命 令がFPU
ステータス・ワードの4
つの条件コードフラグにどのように影響を与えるか を説明している。2.1.6.
保護モード例外「保護モード例外」の項には、命令を保護モードで実行したときに発生する可能性が ある例外およびそれらの例外の理由を示す。各例外は、番号記号(
#
)とその後に続 く2
文字からなるニーモニック、括弧で囲まれたオプションのエラーコードで表され る。例えば、#GP(0)
はエラーコード0
を伴う一般保護例外を示す。表2-2.
に、各2
文 字のニーモニックと割り込みベクタ番号と例外名との対応を示す。これらの例外の詳 細については、『IA-32
インテル®アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、下巻』の第
5
章の「割り込みと例外の処理」を参照のこと。アプリケーション・プログラマは、例外が発生した場合は、該当するオペレーティン グ・システムに付属のマニュアルを調べて対処すること。
表2-2. 割り込みベクタ
ベクタ
番号 名称 発生源
保護 モード
実アドレス モード
仮想 8086 モード
64ビット モード
0 #DE -除算エラー DIVおよびIDIV命令 ○ ○ ○ ○
1 #DB -デバッグ 任意のコードまたは
データ参照
○ ○ ○ ○
3 #BP -ブレークポイント INT 3命令 ○ ○ ○ ○
4 #OF -オーバーフロー INTO命令 ○ ○ ○ ○
5 #BR - BOUND範囲外 BOUND命令 ○ ○ ○ 予約
6 #UD -無効オペコード
(未定義オペコード) UD2命令または予約 オペコード
○ ○ ○ ○
2.1.7.
実アドレスモード例外「実アドレスモード例外」の項には、命令を実アドレスモードで実行したときに発生 する可能性がある例外を示す。
2.1.8.
仮想8086
モード例外「仮想
8086
モード例外」の項には、命令を仮想8086
モードで実行したときに発生する 可能性がある例外を示す。7 #NM -デバイスなし(算術
演算コプロセッサなし)
浮動小数点または WAIT/FWAIT命令
○ ○ ○ ○
8 #DF -ダブルフォルト 例外、NMI、または
INTRを発生する可能 性がある任意の命令
○ ○ ○ ○
10 #TS -無効TSS タスクスイッチまた
はTSSアクセス
○ 予約 ○ ○
11 #NP -セグメントなし セグメント・レジス
タのロードまたはシ ステム・セグメント のアクセス
○ 予約 ○ ○
12 #SS -スタック・セグメン
ト・フォルト
スタック操作および SSレジスタロード
○ ○ ○ ○
13 #GP -一般保護* 任意のメモリ参照お
よびその他の保護 チェック
○ ○ ○ ○
14 #PF -ページフォルト 任意のメモリ参照 ○ 予約 ○ ○
16 #MF -浮動小数点エラー
(算術演算フォルト)
浮動小数点または WAIT/FWAIT命令
○ ○ ○ ○
17 #AC -アライメント・
チェック
任意のメモリデータ 参照
○ 予約 ○ ○
18 #MC -マシンチェック マシン・チェック・
エラーはモデルに依 存
○ ○ ○ ○
19 #XF - SIMD浮動小数点数値
エラー
SSEおよびSSE2浮
動小数点命令
○ ○ ○ ○
* 実アドレスモードにおいて、ベクタ13はセグメント・オーバーラン例外である。
表2-2. 割り込みベクタ (続き)
ベクタ
番号 名称 発生源
保護 モード
実アドレス モード
仮想 8086 モード
64ビット モード
2.1.9.
浮動小数点例外「浮動小数点例外」の項には、
x87 FPU
の浮動小数点命令を実行したときに発生する可 能性がある例外を示す。これらの例外条件はすべて浮動小数点エラー例外(#MF、ベ クタ番号16)を発生させる。表 2-3.
に、1または2
文字のニーモニックと例外名との 対応を示す。これらの例外の詳細については、『IA-32インテル®アーキテクチャ・ソ
フトウェア・デベロッパーズ・マニュアル、上巻』の第8
章を参照のこと。2.1.10. SIMD
浮動小数点例外「
SIMD
浮動小数点例外」の項には、SSE
およびSSE2
浮動小数点命令を実行したとき に発生する可能性がある例外を示す。これらの例外条件は、すべてSIMD
浮動小数点 エラー例外(#XF
、ベクタ番号19
)を発生させる。表2-4.
に、ニーモニックと例外名 の対応を示す。これらの例外の詳細については、『IA-32
インテル®アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、上巻』の第
11
章の「SSE
とSSE2
の例 外」を参照のこと。表2-3. 例外名
ニーモニック 名称 発生源
#IS
#IA
無効浮動小数点演算:
スタック・オーバーフローもしくは アンダーフロー
無効算術演算
x87FPUスタックのオーバーもしくは
アンダーフロー 無効なFPU算術演算
#Z ゼロでの浮動小数点除算 ゼロによる除算
#D 浮動小数点演算デノーマル・オペランド デノーマル・オペランド
#O 浮動小数点数値オーバーフロー 結果がオーバーフロー
#U 浮動小数点数値アンダーフロー 結果がアンダーフロー
#P 浮動小数点不正確結果(精度) 不正確結果(精度)
表2-4. 浮動小数点例外名
ニーモニック 名称 発生源
#I 浮動小数点無効演算 無効算術演算またはソース・オペランド
#Z ゼロでの浮動小数点除算 ゼロによる除算
#D 浮動小数点演算デノーマル・オペランド デノーマル・オペランド
#O 浮動小数点数値オーバーフロー 結果がオーバーフロー
#U 浮動小数点数値アンダーフロー 結果がアンダーフロー
#P 浮動小数点不正確結果 不正確結果(精度)