IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
4-4
データ型
4
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
~2
32-1、符号なしクワッドワード整数では 0
~2
64-1
になる。符号なし整数は、序数とも呼ばれる。
4.2.1.2. 符号付き整数
符号付き整数は、1バイト、1ワード、1ダブルワード、または
1
クワッドワードに格 納される符号付き2
進数である。符号付き整数のすべての演算において、2の補数表 現が使用されているものと見なされる。符号ビットは、バイト整数ではビット7
に、ワード整数ではビット
15
に、ダブルワード整数ではビット31、クワッドワード整数
ではビット63
に配置される(符号付き整数のエンコーディングについては表4-1.
を参 照)。IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
4-6
符号ビットは、負の整数に対してセットされ、正の整数とゼロに対してはクリアされ る。整数値の範囲は、バイト整数では
-128
~+127
、ワード整数では-32,768
~+32,767
、 ダブルワード整数では-2
31~+2
31-1
、クワッドワード整数では-2
63~+2
63になる。整数値をメモリに格納するとき、ワード整数は連続する
2
バイトに格納され、ダブル ワード整数は連続する4
バイトに格納され、クワッドワード整数は連続する8
バイト に格納される。整数不定値は、
x87 FPU
が整数値を操作するときに戻すことがある、特殊な値である。詳細は
8.2.1.
項「不定値」を参照のこと。4.2.2.
浮動小数点データ型IA-32
アーキテクチャは、単精度浮動小数点、倍精度浮動小数点、拡張倍精度浮動小数点の
3
つの浮動小数点データ型を定義しており、これらのデータ型を操作する(図4-3.
を参照)。これらのデータ型のデータ・フォーマットは、2
進浮動小数点演算に関 するIEEE
規格754
で指定されたフォーマットに直接対応する。表
4-2.は、それぞれの浮動小数点データ型で表現できる、長さ、精度、および近似的
な正規化範囲を示している。これらのデータ型では、デノーマル値もサポートされる。
表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 ビット→
データ型
4
注記
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
IA-32 インテル® アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
4-8 注:
1.整数ビットは暗黙であり、単精度や倍精度フォーマットでは格納されない。
2. SNaNのエンコーディングの小数部分は、ゼロでない値で、最上位ビットが0でなければならない。
それぞれの浮動小数点データ型の指数は、バイアス付きフォーマットでコード化され
る。
4.8.2.2.
項「バイアス付き指数」を参照のこと。バイアス定数は、単精度フォーマットでは
127
、倍精度フォーマットでは1023
、拡張倍精度フォーマットでは16,383
になる。浮動小数点値をメモリに格納する場合は、単精度値はメモリ内の連続する
4
バイトに、倍精度値は連続する
8
バイトに、拡張倍精度値は連続する10
バイトにそれぞれ格納さ れる。表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ビット→
データ型
4
単精度および倍精度浮動小数点データ型は、