レジスタ Edit

目次 Edit

レジスタとは Edit

CPU(MPU)の内部にあるメモリのこと。(キャッシュメモリとは違う。)
非常に高速だが容量が小さい。でも、そうぞうよりは結構いろいろなレジスタがある。
メインメモリと違い、自由に使えるところが少ない。
特別な領域。

基本プログラム実行レジスタ Edit

汎用データレジスタ Edit

8つの汎用レジスタがあり、このレジスタは基本的には自由に使える。
しかし、汎用といいながらも制約が多い。
汎用順:eax > edx > ecx > ebx > esi > edi > ebp > esp
なにを使えばいいか迷ったら、a,b,c,dのどれかを使うといい。

C言語などによって特定の処理に使われているものもある。
スタックポインタは、スタックのためのレジスタで、汎用的に使用することはあまりない。
が、intelのアーキテクチャマニュアルには汎用レジスタとして定義されている。

8bitのhはHigh(上位)を、lはLow(下位)を表す。
16bitのxはeXtend(拡張)を表す。
32bitのeはExtendを、xはeXtendを表す。つまりeaxは、拡張の拡張。

8bit16bit32bit名前特徴・用途
--EAXAccumulator汎用レジスタ。特に用途なし。
-
AHAX
AL
--EBXBaseメモリのアドレスを指定する場合に使用する。
-
BHBX
BL
--ECXCounter転送や繰り返しの回数を数えるカウンタとして使用する。
-
CHCX
CL
--EDXData汎用レジスタ。特に用途なし。
-
DHDX
DL
--ESISource Indexストリング命令(movsなど)で移動元(ソース)のアドレスとして使用する。
DSと併せて使用する。
-
-SI
-
--EDIDestination Indexストリング命令(movsなど)で移動先(ディスティネーション)のアドレスとして使用する。
ESと併せて使用する。
-
-DI
-
--ESPStack Pointerスタックのトップのアドレスを示すポインタ。
-
-SP
-
--EBPBase Pointer(c言語において、)スタックのベースのアドレスを示すポインタ。
-
-BP
-

セグメントレジスタ Edit

セグメント(領域)を指定するためのレジスタ。
リアルモードとプロテクトモードでは全く動作が異なるので注意が必要。

リアルモード
セグメントレジスタを4bit左シフトして足すだけという単純な方法で物理アドレスを指定する。
プロテクトモード
メモリ内のセグメント(分割した領域)を指し示す。
セグメントの情報はGDTに登録されている。
16bit名前説明
CSCode Segment実行中の命令を格納するコードセグメント用のセグメント・セレクタを格納するレジスタ。
DSData Segmentデータセグメント用のセグメント・セレクタを格納するレジスタ。
ESExtra Segment追加の(Extra)データセグメント1
FS正式名称無し(D,Eの続きと思われる。)追加のデータセグメント2(i386以降に導入)
GS正式名称無し(アメリカ人のユーモア。)追加のデータセグメント3(i386以降に導入)
SSStack Segmentスタックセグメント用のセグメントセレクタを格納するレジスタ。

命令ポインタ Edit

次に実行する命令を指し示すポインタ。(現在のコードセグメント内)
基本的には順番に進められるが、jmp,call,retなどの命令でいろいろな場所に移動する。

EIPレジスタに直接アクセスすることはできないが、jmp,call,retなどで、暗黙的に制御することが可能。
やりようによっては読み取りもできる。

16bit32bit名前説明
-EIPInstruction Pointer次に実行する命令を指し示すポインタ。(現在のコードセグメント内のオフセット)
IP

EFlagsレジスタ Edit

全32bitで構成されれるレジスタで、各種演算結果、制御フラグ、システムフラグなどが格納される。

S
ステータスフラグを表す。
addやsubなどの演算結果の状態を表す。
C
制御フラグを表す。
制御フラグは、bit10のDFのみに該当する。
X
システムフラグを表す。
OSやアプリケーションの動作を制御する。
このフラグはアプリケーションが変更してはいけない。
予約
干渉してはいけない領域。セットするときは、必ず読み込んだ値をセットすること。
bit種別Flag名前説明関連命令
0SCFCarry Flagキャリーフラグ最上位ビットでキャリーかボローが生じたときに1がセットされる。stc, clc, cmc
11予約
2SPFParity Flagパリティフラグ演算結果の最下位バイトで、値が1のビットが偶数個なら1がセットされる。
30予約
4SAFAuxiliary Carry Flag補助キャリーフラグビット3でキャリーかボローが生じたときに1がセットされる。BCD演算で使用する。
50予約
6SZFZero Flagゼロフラグ演算結果が0のとき1がセットされる。
7SSFSign Flag符号フラグ演算結果の最上位ビットがそのままセットされる。
8XTFTrap Flag
9XIFInterrupt Enable Flag割り込み許可フラグ1のときは割り込みを許可し、0なら割り込みを禁止する。sti, cli
10CDFDirection Flag方向フラグストリング命令を上位に向かって処理(0)するか、下位に向かって処理(1)するかを制御する。std, cld
11SOFOverflow Flagオーバーフローフラグ最上位ビットが変化した場合に1がセットされる。
12XIOPLI/O Privilege LevelI/O特権レベル
13
14XNTNested Task Flag
150予約
16XRFResume Flag
17XVMVirtual-8086 Mode仮想8086モード
18XACAlignment Checkアライメント・チェックこのフラグとCR0のAMフラグを1にセットすると、アライメント・チェックが有効になる。有効にすると、CPLが3のときのみアライメント・チェック例外を発生させることができる。
19XVIFVirtual Interrupt Flag
20XVIPVirtual Interrupt Pending
21XIDIdentification Flag識別フラグこのビットを変更することができれば、CPUID命令を実行することができる。
220予約
230予約
240予約
250予約
260予約
270予約
280予約
290予約
300予約
310予約
CFとOFの違い Edit

8bitのレジスタで処理する場合、
1111 1111から0000 0000になるときとその逆のときにキャリーフラグに1がセットされる。
それに対し、0111 1111から1000 0000になるときとその逆のときにオーバーフローフラグに1がセットされる。
つまり、
キャリーフラグは、符号なし整数を表すときに意味があり、
オーバーフローフラグは、符号あり整数を表すときに意味がある。

制御レジスタ Edit

CPUを制御するためのレジスタ。
CR0~CR4まである。CR = コントロールレジスタ

CR0 Edit

bitFlag名前説明
0PEProtect Enableプロテクトモードを有効にする。
1MPMonitor Coprocesser
2EMEmulation
3TSTask Switch
4ETExtension Type拡張タイプ。最近のCPUでは、1で予約されている。
5NENumerical Error
6予約
7予約
8予約
9予約
10予約
11予約
12予約
13予約
14予約
15予約
16WPWrite Protect
17予約
18AMAlignment MaskこのフラグとEFLAGSのACフラグを1にセットすると、アライメント・チェックが有効になる。有効にすると、CPLが3のときのみアライメント・チェック例外を発生させることができる。
19予約
20予約
21予約
22予約
23予約
24予約
25予約
26予約
27予約
28予約
29NWNot Write through
30CDCash Disable
31PGPaging1にセットすると、ページングを有効にする。PEフラグ(CR0-0)がセットされていないと、このフラグも有効にならない。

CR1 Edit

すべて予約。

CR2 Edit

ページ・フォールト・リニア・アドレス。
ページフォールトを発生させたリニアアドレスが入っている。

CR3( PDBR : ページ・ディレクトリ・ベース・レジスタ ) Edit

Paging

bitFlag名前説明
0予約
1予約
2予約
3PWT
4PCD
5予約
6予約
7予約
8予約
9予約
10予約
11予約
12ページ・ディレクトリ・ベース
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

CR4 Edit

アーキテクチャ上の各種拡張機能を使えるようにするフラグがある。
拡張機能のため、CPUID命令でそのフラグが使用可能か確認してから使用する必要がある。

bitFlag名前説明
0VME
1PVI
2TSD
3DE
4PSEPaging Size Extensions
5PAEPhysical Address Extention
6MCE
7PGE
8PCE
9OSFXSR
10OSXMMEXCPT
11予約
12予約
13予約
14予約
15予約
16予約
17予約
18予約
19予約
20予約
21予約
22予約
23予約
24予約
25予約
26予約
27予約
28予約
29予約
30予約
31予約

システム・テーブル・ポインタ・レジスタ Edit

GDTR Edit

Bytebit内容
00GDTのリミット
1
2
3
4
5
6
7
10
1
2
3
4
5
6
7
20GDTのリニア・ベース・アドレス
1
2
3
4
5
6
7
30
1
2
3
4
5
6
7
40
1
2
3
4
5
6
7
50
1
2
3
4
5
6
7

IDTR Edit

Bytebit内容
00IDTのリミット
1
2
3
4
5
6
7
10
1
2
3
4
5
6
7
20IDTのリニア・ベース・アドレス
1
2
3
4
5
6
7
30
1
2
3
4
5
6
7
40
1
2
3
4
5
6
7
50
1
2
3
4
5
6
7

TR Edit

タスクレジスタは、TSSディスクリプタを指すセグメント・セレクタ?部分と、自動で読み込まれるキャッシュ部分がある。

Bytebit内容
00TSSディスクリプタを指すセグメント・セレクタ?
1
2
3
4
5
6
7
10
1
2
3
4
5
6
7

LDTR Edit

FPUレジスタ Edit

浮動小数点データ・レジスタ Edit

コントロールレジスタ Edit

ステータスレジスタ Edit

タグレジスタ Edit

オペコードレジスタ Edit

FPU命令ポインタレジスタ Edit

FPUオペランド(データ)ポインタレジスタ Edit

MMXテクノロジ・レジスタ Edit

MMXテクノロジ・レジスタ Edit

XMMレジスタ Edit

XMMレジスタ Edit

MXCSRレジスタ Edit

参考関連 Edit

  • IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ
  • IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 下巻:システム・プログラミング・ガイド
  • Intel 8086 Family Architecture
  • EFLAGS - 通信用語の基礎知識

Since 2008 July. OS Project Wiki
リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS