x86/Register
の編集
Top
>
x86
> Register
[
ホーム
] [
一覧
|
検索
|
ヘルプ
]
-- 雛形とするページ --
!Template
A20
API
ATA/ATAPI
ATA/ATAPI/Command
ATA/ATAPI/I/O Port, Register
ATA/ATAPI/Transfer
ATA/ATAPI/Transfer/UltraDMA
Address space
Assembly language
BBS
Barn
Books
Boot process
Build
Comments/El Torito
Comments/Memo
Comments/OS glossary
Comments/Privilege levels
Comments/Projects/TestOS_CD
Computer language
Computer language/C
Computer language/C++
Computer language/C++/Class
Computer language/C++/Class/Inheritance
Computer language/C++/Operator
Computer language/C++/関数名forアセンブリ
Computer language/C/Complex sentence
Computer language/GNU Assembler
DMA
DMAC
DMAC/Intel 8237A
Development environment for Linux
Device
Device/82093AA
Device/8259
Device/PCI
Device/PCI to ISA Bridge
Device/PCI/Class Code
El Torito
Exception
FDC
FDC/82077AA
FDD boot
FDDブート
FileSystem
FileSystem/ISO 9660
FileSystem/Joliet
Format/FileFormat
Format/FileFormat/ELF
Format/FileFormat/PNG
FormattingRules
GCC
GHex
Help
Info
Info/Copyright Policy
Info/Introduction
Inline assembly
InterWikiName
I/O port address
I/O port address/0x0000~0x03ff
I/O port address/0x0c00~0x0fff
I/Oポートアドレス
KBC
KBC/Intel 8042
Kernel
Linker script
Links
MBR
Makefile
Memo
Memo/Flags
Memo/Linux
Memo/if文が遅い理由
Memo/アドレスの種類
Memo/クラス設計パターン
Memo/コメントアウト手法
Memo/ブートセクタ
Memo/メモリの連続領域(一次元)を多次元で扱う
Memo/リンカスクリプト
Memo/二重ループをアセンブリで書く
Memo/勉強会でのプレゼン
Memory management
Memory map
Menu
NDP
OS
OS glossary
OS用語集
PIC
PIT
PIT/Intel 8254
PORTA
PORTB
Page fault
Paging
Popular
Privilege levels
Projects
Projects/ML_Check
Projects/TestOS_CD
Projects/TestOS_FDD
QEMU
RTC
RTC/MC146818A
Recent
SandBox
Section
Stack
Stack switching
System port A
System port B
Top
Trouble Information
UEFI
VESA
arch/arm
x64
x64/Descriptor/Base
x64/Descriptor/Segment descriptor
x64/Descriptor/System descriptor
x64/Descriptor/System descriptor/System segment descriptor/LDT segment descriptor
x64/Descriptor/System descriptor/System segment descriptor/TSS descriptor
x64/Descriptor/System descriptor/Type
x86
x86/Descriptor
x86/Descriptor/AVL
x86/Descriptor/Base
x86/Descriptor/DPL
x86/Descriptor/D/B
x86/Descriptor/G
x86/Descriptor/Limit
x86/Descriptor/P
x86/Descriptor/S
x86/Descriptor/Segment descriptor
x86/Descriptor/Segment descriptor/A
x86/Descriptor/Segment descriptor/Type
x86/Descriptor/System descriptor
x86/Descriptor/System descriptor/Gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Call gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Interrupt gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Task gate descriptor
x86/Descriptor/System descriptor/Gate descriptor/Trap gate descriptor
x86/Descriptor/System descriptor/System segment descriptor
x86/Descriptor/System descriptor/System segment descriptor/LDT segment descriptor
x86/Descriptor/System descriptor/System segment descriptor/TSS descriptor
x86/Descriptor/System descriptor/Type
x86/GDT
x86/IDT
x86/Interrupt management
x86/LDT
x86/Register
x86/Segment selector
x86/Task management
x86/Task management/TSS
システム・ポートA
システム・ポートB
セクション
ヒデ
特権レベル
*** コントロールレジスタ [#zf25a028]
タイムスタンプを変更しない
TITLE:レジスタ * レジスタ [#wfdf5844] ** 目次 [#rf1cf269] #contents ** レジスタとは [#nb0083ac] CPU(MPU)の内部にあるメモリのこと。(キャッシュメモリとは違う。)~ 非常に高速だが容量が小さい。でも、そうぞうよりは結構いろいろなレジスタがある。~ メインメモリと違い、自由に使えるところが少ない。~ 特別な領域。 ** 基本プログラム実行レジスタ [#ifd9a0b4] *** 汎用データレジスタ [#offa7fbb] 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は、拡張の拡張。 |~8bit|~16bit|~32bit|~名前|~特徴・用途| |-|-|EAX|Accumulator|汎用レジスタ。特に用途なし。| |-|~|~|~|~| |AH|AX|~|~|~| |AL|~|~|~|~| |-|-|EBX|Base|メモリのアドレスを指定する場合に使用する。| |-|~|~|~|~| |BH|BX|~|~|~| |BL|~|~|~|~| |-|-|ECX|Counter|転送や繰り返しの回数を数えるカウンタとして使用する。| |-|~|~|~|~| |CH|CX|~|~|~| |CL|~|~|~|~| |-|-|EDX|Data|汎用レジスタ。特に用途なし。| |-|~|~|~|~| |DH|DX|~|~|~| |DL|~|~|~|~| |-|-|ESI|Source Index|ストリング命令(movsなど)で移動元(ソース)のアドレスとして使用する。&br;DSと併せて使用する。| |-|~|~|~|~| |-|SI|~|~|~| |-|~|~|~|~| |-|-|EDI|Destination Index|ストリング命令(movsなど)で移動先(ディスティネーション)のアドレスとして使用する。&br;ESと併せて使用する。| |-|~|~|~|~| |-|DI|~|~|~| |-|~|~|~|~| |-|-|ESP|Stack Pointer|[[スタック>Stack]]のトップのアドレスを示すポインタ。| |-|~|~|~|~| |-|SP|~|~|~| |-|~|~|~|~| |-|-|EBP|Base Pointer|(c言語において、)[[スタック>Stack]]のベースのアドレスを示すポインタ。| |-|~|~|~|~| |-|BP|~|~|~| |-|~|~|~|~| *** セグメントレジスタ [#g978c671] セグメント(領域)を指定するためのレジスタ。~ リアルモードとプロテクトモードでは全く動作が異なるので注意が必要。 :リアルモード| セグメントレジスタを4bit左シフトして足すだけという単純な方法で物理アドレスを指定する。~ :プロテクトモード| メモリ内のセグメント(分割した領域)を指し示す。~ セグメントの情報は[[GDT>../GDT]]に登録されている。 |~16bit|~名前|~説明| |CS|Code Segment|実行中の命令を格納するコードセグメント用のセグメント・セレクタを格納するレジスタ。| |DS|Data Segment|データセグメント用のセグメント・セレクタを格納するレジスタ。| |ES|Extra Segment|追加の(Extra)データセグメント1| |FS|正式名称無し(D,Eの続きと思われる。)|追加のデータセグメント2(i386以降に導入)| |GS|正式名称無し(アメリカ人のユーモア。)|追加のデータセグメント3(i386以降に導入)| |SS|Stack Segment|スタックセグメント用のセグメントセレクタを格納するレジスタ。| *** 命令ポインタ [#l143d664] 次に実行する命令を指し示すポインタ。(現在のコードセグメント内)~ 基本的には順番に進められるが、jmp,call,retなどの命令でいろいろな場所に移動する。 EIPレジスタに直接アクセスすることはできないが、jmp,call,retなどで、暗黙的に制御することが可能。~ やりようによっては読み取りもできる。 |~16bit|~32bit|~名前|~説明| |-|EIP|Instruction Pointer|次に実行する命令を指し示すポインタ。(現在のコードセグメント内のオフセット)| |IP|~|~|~| *** EFlagsレジスタ [#meaa2dd6] 全32bitで構成されれるレジスタで、各種演算結果、制御フラグ、システムフラグなどが格納される。 :S| ステータスフラグを表す。~ addやsubなどの演算結果の状態を表す。 :C| 制御フラグを表す。~ 制御フラグは、bit10のDFのみに該当する。 :X| システムフラグを表す。~ OSやアプリケーションの動作を制御する。~ ''このフラグはアプリケーションが変更してはいけない。'' :予約| 干渉してはいけない領域。&color(#f00){セットするときは、必ず読み込んだ値をセットすること。}; |~bit|~種別|~Flag|>|~名前|~説明|~関連命令| |0|S|CF|Carry Flag|キャリーフラグ|最上位ビットでキャリーかボローが生じたときに1がセットされる。|stc, clc, cmc| |BGCOLOR(#ddd):1|BGCOLOR(#ddd):|BGCOLOR(#ddd):1|BGCOLOR(#ddd):|BGCOLOR(#ddd):|BGCOLOR(#ddd):予約|BGCOLOR(#ddd):| |2|S|PF|Parity Flag|パリティフラグ|演算結果の最下位''バイト''で、値が1のビットが偶数個なら1がセットされる。|| |BGCOLOR(#ddd):3|BGCOLOR(#ddd):|BGCOLOR(#ddd):0|BGCOLOR(#ddd):|BGCOLOR(#ddd):|BGCOLOR(#ddd):予約|BGCOLOR(#ddd):| |4|S|AF|Auxiliary Carry Flag|補助キャリーフラグ|ビット3でキャリーかボローが生じたときに1がセットされる。BCD演算で使用する。|| |BGCOLOR(#ddd):5|BGCOLOR(#ddd):|BGCOLOR(#ddd):0|BGCOLOR(#ddd):|BGCOLOR(#ddd):|BGCOLOR(#ddd):予約|BGCOLOR(#ddd):| |6|S|ZF|Zero Flag|ゼロフラグ|演算結果が0のとき1がセットされる。|| |7|S|SF|Sign Flag|符号フラグ|演算結果の最上位ビットがそのままセットされる。|| |8|X|TF|Trap Flag|||| |9|X|IF|Interrupt Enable Flag|割り込み許可フラグ|1のときは割り込みを許可し、0なら割り込みを禁止する。|sti, cli| |10|C|DF|Direction Flag|方向フラグ|ストリング命令を上位に向かって処理(0)するか、下位に向かって処理(1)するかを制御する。|std, cld| |11|S|OF|Overflow Flag|オーバーフローフラグ|最上位ビットが変化した場合に1がセットされる。|| |12|X|IOPL|I/O Privilege Level|I/O特権レベル||| |13|~|~|~|~|~|~| |14|X|NT|Nested Task Flag|||| |BGCOLOR(#ddd):15|BGCOLOR(#ddd):|BGCOLOR(#ddd):0|BGCOLOR(#ddd):|BGCOLOR(#ddd):|BGCOLOR(#ddd):予約|BGCOLOR(#ddd):| |16|X|RF|Resume Flag|||| |17|X|VM|Virtual-8086 Mode|仮想8086モード||| |18|X|AC|Alignment Check|アライメント・チェック|このフラグとCR0のAMフラグを1にセットすると、アライメント・チェックが有効になる。有効にすると、CPLが3のときのみアライメント・チェック例外を発生させることができる。|| |19|X|VIF|Virtual Interrupt Flag|||| |20|X|VIP|Virtual Interrupt Pending|||| |21|X|ID|Identification Flag|識別フラグ|このビットを変更することができれば、CPUID命令を実行することができる。|| |>|>|>|>|>|>|BGCOLOR(#ddd):|c |22||0|||予約|| |23||0|||予約|| |24||0|||予約|| |25||0|||予約|| |26||0|||予約|| |27||0|||予約|| |28||0|||予約|| |29||0|||予約|| |30||0|||予約|| |31||0|||予約|| **** CFとOFの違い [#w355ee00] 8bitのレジスタで処理する場合、~ 1111 1111から0000 0000になるときとその逆のときにキャリーフラグに1がセットされる。~ それに対し、0111 1111から1000 0000になるときとその逆のときにオーバーフローフラグに1がセットされる。~ つまり、~ キャリーフラグは、符号''なし''整数を表すときに意味があり、~ オーバーフローフラグは、符号''あり''整数を表すときに意味がある。 ** 制御レジスタ [#xa35dd66] CPUを制御するためのレジスタ。~ CR0~CR4まである。CR = コントロールレジスタ *** CR0 [#e7cea17d] |~bit|~Flag|~名前|~説明| |0|PE|Protect Enable|プロテクトモードを有効にする。| |1|MP|Monitor Coprocesser|| |2|EM|Emulation|| |3|TS|Task Switch|| |4|ET|Extension Type|拡張タイプ。最近のCPUでは、1で予約されている。| |5|NE|Numerical Error|| |>|>|>|BGCOLOR(#ddd):|c |6|||予約| |7|||予約| |8|||予約| |9|||予約| |10|||予約| |11|||予約| |12|||予約| |13|||予約| |14|||予約| |15|||予約| |>|>|>|BGCOLOR(#fff):|c |16|WP|Write Protect|| |>|>|>|BGCOLOR(#ddd):|c |17|||予約| |>|>|>|BGCOLOR(#fff):|c |18|AM|Alignment Mask|このフラグとEFLAGSのACフラグを1にセットすると、アライメント・チェックが有効になる。有効にすると、CPLが3のときのみアライメント・チェック例外を発生させることができる。| |>|>|>|BGCOLOR(#ddd):|c |19|||予約| |20|||予約| |21|||予約| |22|||予約| |23|||予約| |24|||予約| |25|||予約| |26|||予約| |27|||予約| |28|||予約| |>|>|>|BGCOLOR(#fff):|c |29|NW|Not Write through|| |30|CD|Cash Disable|| |31|PG|Paging|1にセットすると、ページングを有効にする。PEフラグ(CR0-0)がセットされていないと、このフラグも有効にならない。| *** CR1 [#a8cc2e8d] すべて予約。 *** CR2 [#rdc2b6ca] ページ・フォールト・リニア・アドレス。~ [[ページフォールト>Page fault]]を発生させたリニアアドレスが入っている。 *** CR3( PDBR : ページ・ディレクトリ・ベース・レジスタ ) [#j68fe188] →[[Paging]] |~bit|~Flag|~名前|~説明| |>|>|>|BGCOLOR(#ddd):|c |0|||予約| |1|||予約| |2|||予約| |>|>|>|BGCOLOR(#fff):|c |3|PWT||| |4|PCD||| |>|>|>|BGCOLOR(#ddd):|c |5|||予約| |6|||予約| |7|||予約| |8|||予約| |9|||予約| |10|||予約| |11|||予約| |>|>|>|BGCOLOR(#fff):|c |12|||ページ・ディレクトリ・ベース| |13|~|~|~| |14|~|~|~| |15|~|~|~| |16|~|~|~| |17|~|~|~| |18|~|~|~| |19|~|~|~| |20|~|~|~| |21|~|~|~| |22|~|~|~| |23|~|~|~| |24|~|~|~| |25|~|~|~| |26|~|~|~| |27|~|~|~| |28|~|~|~| |29|~|~|~| |30|~|~|~| |31|~|~|~| *** CR4 [#kdc81e7f] アーキテクチャ上の各種拡張機能を使えるようにするフラグがある。~ 拡張機能のため、CPUID命令でそのフラグが使用可能か確認してから使用する必要がある。 |~bit|~Flag|~名前|~説明| |0|VME||| |1|PVI||| |2|TSD||| |3|DE||| |4|PSE|Paging Size Extensions|| |5|PAE|Physical Address Extention|| |6|MCE||| |7|PGE||| |8|PCE||| |9|OSFXSR||| |10|OSXMMEXCPT||| |>|>|>|BGCOLOR(#ddd):|c |11|||予約| |12|||予約| |13|||予約| |14|||予約| |15|||予約| |16|||予約| |17|||予約| |18|||予約| |19|||予約| |20|||予約| |21|||予約| |22|||予約| |23|||予約| |24|||予約| |25|||予約| |26|||予約| |27|||予約| |28|||予約| |29|||予約| |30|||予約| |31|||予約| ** システム・テーブル・ポインタ・レジスタ [#aa68f2a4] *** GDTR [#d83b2134] |~Byte|~bit|~内容| |0|0|GDTのリミット| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |1|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |2|0|GDTのリニア・ベース・アドレス| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |3|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |4|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |5|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| *** IDTR [#ga4217bd] |~Byte|~bit|~内容| |0|0|IDTのリミット| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |1|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |2|0|IDTのリニア・ベース・アドレス| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |3|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |4|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |5|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| *** TR [#w6207087] タスクレジスタは、TSSディスクリプタを指す[[セグメント・セレクタ]]部分と、自動で読み込まれるキャッシュ部分がある。 |~Byte|~bit|~内容| |0|0|TSSディスクリプタを指す[[セグメント・セレクタ]]| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| |1|0|~| |~|1|~| |~|2|~| |~|3|~| |~|4|~| |~|5|~| |~|6|~| |~|7|~| *** LDTR [#nf2a9f56] ** FPUレジスタ [#e8b0acbf] *** 浮動小数点データ・レジスタ [#lf9ce97d] *** コントロールレジスタ [#zf25a028] *** ステータスレジスタ [#va68097e] *** タグレジスタ [#ae3b0a14] *** オペコードレジスタ [#h0787e48] *** FPU命令ポインタレジスタ [#n219be25] *** FPUオペランド(データ)ポインタレジスタ [#t847d00d] ** MMXテクノロジ・レジスタ [#x3fdf3c2] *** MMXテクノロジ・レジスタ [#sc03820c] ** XMMレジスタ [#s1f2170a] *** XMMレジスタ [#y9a3b6c6] *** MXCSRレジスタ [#w6bfbaea] ** 参考関連 [#j2bea49a] - IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 上巻:基本アーキテクチャ - IA-32 インテル® アーキテクチャ ソフトウェア・デベロッパーズ・マニュアル 下巻:システム・プログラミング・ガイド - [[Intel 8086 Family Architecture:http://caspar.hazymoon.jp/OpenBSD/annex/intel_arc.html]] - [[EFLAGS - 通信用語の基礎知識:http://www.wdic.org/w/SCI/EFLAGS]]
Since 2008 July. OS Project Wiki