IA-32 インテル ®
4.2.1. 整数
IA-32アーキテクチャは、2種類の整数(符号なし整数と符号付き整数)を定義している。符号なし
整数は、0〜正の最大数の範囲の通常の2進値で、選択したオペランド・サイズでエンコードできる。
符号付き整数は、正と負の両方の整数値を表現できる、2の補数の2進値である。
一部の整数命令(ADD、SUB、PADDB、およびPSUBB命令など)は、符号なし整数と符号付き整 数のオペランドを操作できる。その他の整数命令(IMUL、MUL、IDIV、DIV、FIADD、およびFISUB など)は、いずれかのタイプの整数だけを操作する。
以下の各節では、2種類の整数のエンコーディングと範囲について説明する。
4.2.1.1. 符号なし整数
符号なし整数は、1バイト、1ワード、1ダブルワード、またはクワッドワードに格納される符号な し2進数である。符号なし整数値の範囲は、符号なしバイト整数では0〜255、符号なしワード整数
では0〜65,535、符号なしダブルワード整数では0〜232-1、符号なしクワッドワード整数では0〜
264-1になる。符号なし整数は、序数とも呼ばれる。
4.2.1.2. 符号付き整数
符号付き整数は、1バイト、1ワード、1ダブルワード、または1クワッドワードに格納される符号付 き2進数である。符号付き整数のすべての演算において、2の補数表現が使用されているものと見な される。符号ビットは、バイト整数ではビット7に、ワード整数ではビット15に、ダブルワード整 数ではビット31、クワッドワード整数ではビット63に配置される(符号付き整数のエンコーディン グについては表4-1.を参照)。
表4-1. 符号付き整数のエンコーディング
クラス 2の補数のエンコーディング
符号
正 最大 0 11..11
. .
. .
最小 0 00..01
0 0 00..00
負 最小 1 11..11
. .
. .
最大 1 00..00
整数不定値 1 00..00
符号付きバイト整数 符号付きワード整数 符号付きダブルワード整数 符号付きクワッドワード整数
←
7ビット→
←
15 ビット→
←
31ビット→
←
63 ビット→
符号ビットは、負の整数に対してセットされ、正の整数とゼロに対してはクリアされる。整数値の 範囲は、バイト整数では-128〜+127、ワード整数では-32,768〜+32,767、ダブルワード整数では-231
〜+2 31-1、クワッドワード整数では-263〜+263になる。
整数値をメモリに格納するとき、ワード整数は連続する2バイトに格納され、ダブルワード整数は連 続する4バイトに格納され、クワッドワード整数は連続する8バイトに格納される。
整数不定値は、x87 FPUが整数値を操作するときに戻すことがある、特殊な値である(8.2.1.項「不 定値」を参照)。
4.2.2. 浮動小数点データ型
IA-32アーキテクチャは、単精度浮動小数点、倍精度浮動小数点、および拡張倍精度浮動小数点の3
つの浮動小数点データ型を定義しており、これらのデータ型を操作する(図4-3.を参照)。これらの データ型のデータ・フォーマットは、2進浮動小数点演算に関するIEEE規格754で指定されたフォー マットに直接対応する。表4-2.は、それぞれの浮動小数点データ型で表現できる、長さ、精度、お よび近似的な正規化範囲を示している。これらのデータ型では、デノーマル値もサポートされる。
注記
4.8.節「実数フォーマットと浮動小数点フォーマット」では、IEEE規格754の浮 動小数点フォーマットの概要を説明し、整数ビット、QNaN、SNaN、およびデノー マル値などの用語を定義する。
表4-3.は、3つの浮動小数点データ型について、0、デノーマル型有限数、ノーマル型有限数、無限 大、およびNaNの浮動小数点エンコーディングを示している。また、QNaNの浮動小数点不定値の フォーマットを示す。(QNaNの浮動小数点不定値の使い方の説明は、4.8.3.7.項 「QNAN浮動小数点 不定数」を参照のこと。)
単精度フォーマットと倍精度フォーマットでは、仮数部の小数部分だけがコード化される。整数部 分は、0とデノーマル型有限数を除き、すべて1と見なされる。拡張倍精度フォーマットでは、整数 部分がビット63に、小数部分の最上位ビットがビット62に格納される。この場合、整数部分はノー マル型数、無限大、およびNaNに対しては明示的に1に設定され、ゼロおよびデノーマル型数につ いては0に設定される。
表4-2. 浮動小数点データ型の長さ、精度、および範囲
データ型 長さ 精度
(ビット)
ノーマル型の近似範囲
2進 0進
単精度 32 24 2–126 〜 2127 1.18 × 10–38〜 3.40 × 1038
倍精度 64 53 2–1022〜 21023 2.23 × 10–308 〜 1.79 × 10308
拡張倍精度 80 64 2–16382 〜216383 3.37 × 10–4932 〜 1.18 × 104932
注:
1. 整数ビットは暗黙であり、単精度や倍精度フォーマットでは格納されない。
2. SNaNのエンコーディングの小数部分は、ゼロでない値で、最上位ビットが0でなければならない。
それぞれの浮動小数点データ型の指数は、バイアス付きフォーマットでコード化される(4.8.2.2.項
「バイアス付き指数」を参照)。バイアス定数は、単精度フォーマットでは127、倍精度フォーマット
では1023、拡張倍精度フォーマットでは16,383になる。
浮動小数点値をメモリに格納する場合は、単精度値はメモリ内の連続する4バイトに、倍精度値は連 続する8バイトに、拡張倍精度値は連続する10バイトにそれぞれ格納される。
単精度および倍精度浮動小数点データ型は、x87 FPU命令、SSE、およびSSE2によって操作される。
拡張倍精度浮動小数点フォーマットは、x87 FPUだけが操作できる。x87 FPU命令、SSE、および
表4-3. 浮動小数点とNaNのエンコーディング
クラス 符号 バイアス付き指数 仮部数
整数部分1 小数部分
正 +∞ 0 11..11 1 00..00
+ノーマル 0
. . 0
11..10 . . 00..01
1 . . 1
11..11 . . 00..00 +デノーマル 0
. . 0
00..00 . . 00..00
0 . . 0
11.11 . . 00..01
+ゼロ 0 00..00 0 00..00
負 −ゼロ 1 00..00 0 00..00
−デノーマル 1 . . 1
00..00 . . 00..00
0 . . 0
00..01 . . 11..11
−ノーマル 1
. . 1
00..01 . . 11..10
1 . . 1
00..00 . . 11..11
−∞ 1 11..11 1 00..00
NaNs SNaN X 11..11 1 0X..XX2
QNaN X 11..11 1 1X..XX
QNaN 浮動小数点不定 数
1 11..11 1 10..00
単精度: 倍精度: 拡張倍精度:
←
8ビット→
←
11ビット→
←
15ビット→
←
23ビット→
←
52ビット→
←
63ビット→
SSE2の間の、単精度および倍精度浮動小数点データ型の互換性については、11.6.8.項 「SIMD浮動 小数点データ型とx87 FPU浮動小数点データ型の互換性」を参照のこと。
4 .3 . ポインタ・データ型
ポインタは、メモリ内のロケーションに対するアドレスである(図4-4.参照)。IA-32アーキテクチャ は、nearポインタ(32ビット)とfarポインタ(48ビット)の2種類のポインタを定義する。nearポ インタは、セグメント内の32ビット・オフセット(実効アドレスとも呼ばれる)である。nearポイ ンタは、フラット・メモリ・モデルではすべてのメモリを参照するのに使用される。また、セグメ ント化モデルでの参照にも使用されるが、アクセスの対象となるセグメントは暗黙的に決まる。こ れに対し、farポインタは、16ビットのセグメント・セレクタと32ビットのオフセットからなる48 ビットの論理アドレスである。farポインタをセグメント化メモリ・モデルでのメモリ参照に使用す る場合には、アクセスの対象となるセグメントは明示的に指定しなければならない。
4 .4 . ビット・フィールド・データ型
ビット・フィールド(図4-5.参照)は、連続するビット・シーケンスである。ビット・フィールド は、メモリ内にある任意のバイトの任意のビット位置から開始でき、また最大32ビットを格納でき る。
図4-4. ポインタ・データ型
図4-5. ビット・フィールド・データ型
0 47
farポインタまたは論理アドレス セグメント・セレクタ
32 31
オフセット nearポインタ
0 31
オフセット
ビット・フィールド
フィールド長
最下位ビット
4 .5 . ストリング・データ型
ストリングは、連続するビット、バイト、ワード、またはダブルワードのシーケンスである。ビッ ト・ストリングは、任意のバイトの任意のビット位置から開始でき、また最大232-1ビットを格納で きる。バイト・ストリングは、バイト、ワード、ダブルワードを格納でき、また0〜232-1バイト(4G バイト)の範囲である。
4 .6 . パックド S IM D データ型
IA-32アーキテクチャは、SIMD演算に使用される、一連の64ビットおよび128ビット・パックド・デー
タ型を定義しており、それらのデータ型を操作する。これらのデータ型は、基本データ型(パックド・
バイト、パックド・ワード、パックド・ダブルワード、およびパックド・クワッドワード)と基本デー タ型の数値表現で構成され、パックド整数演算およびパックド浮動小数点演算に使用される。
4.6.1. 64 ビット・パックド SIMD データ型
64ビット・パックドSIMDデータ型は、インテルMMXテクノロジでIA-32アーキテクチャに導入さ れた。これらのデータ型は、主に64ビットMMXテクノロジ・レジスタ内で操作される。64ビット・
パックド基本データ型は、パックド・バイト、パックド・ワード、およびパックド・ダブルワード である(図4-6.を参照)。MMXテクノロジ・レジスタ内でこれらのデータ型の数値SIMD演算を実行 する場合、これらのデータ型は、バイト整数、ワード整数、またはダブルワード整数の値を含むも のとして解釈される。
図4-6. 64ビット・パックドSIMDデータ型
パックド・ワード パックド・バイト
パックド・ダブルワード 0
63
0 63
63 0
パックド・ワード整数 パックド・バイト整数
パックド・ダブルワード整数 0
63
0 63
63 0
64ビット・パックドSIMD基本データ型
64ビット・パックド整数データ型
4.6.2. 128 ビット・パックド SIMD データ型
128ビット・パックドSIMDデータ型は、SSEでIA-32アーキテクチャに導入され、SSE2で拡張され た。これらのデータ型は、主に128ビットXMMレジスタとメモリ内で操作される。128ビット・パッ クド基本データ型は、パックド・バイト、パックド・ワード、パックド・ダブルワード、およびパッ クド・クワッドワードである(図4-7.を参照)。XMMレジスタ内でこれらの基本データ型のSIMD演 算を実行する場合、これらのデータ型は、パックドまたはスカラ形式の単精度浮動小数点値または 倍精度浮動小数点値を含むものとして解釈されるか、パックド・バイト整数、パックド・ワード整 数、パックド・ダブルワード整数、またはパックド・クワッドワード整数の値を含むものとして解 釈される。
図4-7. 128ビット・パックドSIMDデータ型
0 127
パックド・ワード パックド・バイト
パックド・ダブルワード 128ビット・パックドSIMD基本データ型
128ビット・パックド浮動小数点データ型および整数データ型
パックド・クワッドワード
0 127
0 127
0 127
0 127
0 127
0 127
0 127
0 127
0 127
パックド単精度浮動小数点
パックド倍精度浮動小数点
パックド・クワッドワード整数 パックド・ダブルワード整数 パックド・ワード整数 パックド・バイト整数