この記事について
この記事の対象者
Intel x86 CPU の汎用レジスタについてよくわからない方 or なまえの由来について知りたい方
多少雑な記事かもしれませんがお許しください><
本編?
Intel x86 CPU の汎用レジスタの引用
RAX/EAX/AX/AL/AH : 「アキュムレータレジスタ」と呼ばれる。算術演算操作の結果が格納される。
REX/ECX/CX/CL/CH : 「カウンタレジスタ」と呼ばれる。シフトローテート命令とループ命令に使用される。
RDX/EDX/DX/DL/DH : 「データレジスタ」と呼ばれる。算術演算操作とI/O操作に使用される。
EBX/BX/BL/BH : 「ベースレジスタ」と呼ばれる。セグメントモードでのDS(後述)に格納されたデータを指し示すために使用される。
RSP/ESP/SP : 「スタックポインターレジスタ」と呼ばれる。スタックのトップを指し示すポインタ。
RBP/EBP/BP : 「スタックベースポインタレジスタ」と呼ばれる。スタックのベースを指し示すのに使用される。
RSI/ESI/SI : 「ソースレジスタ」と呼ばれる。ストリーム操作コマンド(たとえば MOV命令)でのソース(入力元)へのポインタとして使用される。
RDI/EDI/DI : 「デスティネーションレジスタ」と呼ばれる。ストリーム操作コマンドでの転送先(←英語でデスティネーションという. 出力先のようなもの)へのポインタとして使用される。
引用元:https://ja.wikibooks.org/wiki/X86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9/x86%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3#%E6%B1%8E%E7%94%A8%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF_(GPR)
...らしいけど ...
私「小難しくまとめたな、、、」
ということで、今回は軽く私がまとめます
どんな感じか
64 bit | 32 bit | 16 bit | 8 bit | 8 bit |
---|---|---|---|---|
RAX | EAX | AX | AL | AH |
REX | ECX | CX | CL | CH |
RDX | EDX | DX | DL | DH |
EBX | BX | BL | BH | |
RSP | ESP | SP | ||
RBP | EBP | BP | ||
RSI | ESI | SI | ||
RDI | EDI | DI | ||
名前は16 bit のやつがベースです |
||||
16bit のレジスタ名にE を付ければ32 bit レジスタ |
||||
16bit のレジスタ名のR を付ければ64 bit レジスタ |
AX BX CX DXのレジスタは、XをLかHに書き換えることができます
AXを例にとると
| AX|
|AH|AL|
このように、AHはAXの上位8ビット、逆に下位8ビットを参照したいならALという風です
これは、AX BX CX DXのどのレジスタにも言えることです。
32ビットレジスタの名前の由来
順に説明していきます
###AX
正式名称は「アキュムレータレジスタ」らしいですがよくわかりませんね
私もよくわかりませんが。どうやら計算の結果などが入るらしいです
###BX
正式名称は「ベースレジスタ」と呼ばれるらしいです
これは私もわからないので引用します
セグメントモードでのDS(後述)に格納されたデータを指し示すために使用される。
https://ja.wikibooks.org/wiki/X86%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9/x86%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3#%E3%82%BB%E3%82%B0%E3%83%A1%E3%83%B3%E3%83%88%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF
セグメントモード:わからん
DS:データのやつがあるところ(雑)
###CX
正式名))「カウントレジスタ」
ループとシフトローテート命令?に使われるらしいです
ループはloopニーモニックの荒れです
シフトローテート命令は、使ったことないです、、、
###DX
「データレジスタ」
計算と、IO操作に使われるそうです
AXとDXを使いたいときとか?わかんね
###SP
これは簡単です
スペシャル!!!
「スタックポインタ」です
現在のスタックがさしているアドレスが入ってます
###BP
これは、[SP]の親的な何かです
「ベースポインタ」
なんのベースかというとスタックのベース(最初のアドレス?)だと思います
###SI
「ソースレジスタ」
連続して読み込むときに使うらしいです
puts関数をアセンブラで書くときなどに使えるのではないでしょうか
###DI
「ディスとレーションレジスタ」?
SIとついの関係にあり、連続して書き込むときに使うらしいです
ほかにもレジスタはあります。