ここでは 8086 のレジスタ構成を説明します。8086 系のプロセッサはすべて 8086 に上位互換性を持っていますので、この説明は他のプロセッサにもそのまま当てはまります。ただし 80386 以上の 32 ビットプロセッサでは、レジスタ構成に拡張がなされていますので、その拡張部分については「80186/80286 追加命令」をご覧ください。
8086 プロセッサは 8 本の汎用レジスタ(うち 1 本はスタックポインタ)、4 本のセグメントレジスタと、各 1 本の命令ポインタ、フラグレジスタを持っています。次にこれらのレジスタを示します。
汎用レジスタ
セグメントレジスタ
その他
汎用レジスタのうち AX、BX、CX、DX の 4 本は、下位 8 ビットと上位 8 ビットを分割して使用することができます。
汎用レジスタのうち SI、DI、BX、BP はインデクス/ベースレジスタ(アドレスを示すレジスタ)として使用することができます。
汎用レジスタは一般的な演算や転送に使用することができますが、セグメントレジスタはセグメントアドレスを保持する以外の機能はほとんどありません。
レジスタの個別説明
以下ではレジスタを順に説明します。個々のレジスタは、それぞれ何らかの特徴を持っています。
AX 汎用レジスタ (AH+AL)
最もよく使用されるレジスタであり、このレジスタでないと実行できない命令(MUL など)や、このレジスタでならばより効率的に実行できる命令がいくつもあります。
8 ビットレジスタに分割した場合は、下位 8 ビットの AL レジスタが AX レジスタに準じた特別なレジスタになります。
BX 汎用レジスタ (BH+BL)
このレジスタは、ベースレジスタとしてアドレス指定にも使用できます。
CX 汎用レジスタ (CH+CL)
プロセッサ命令の中には、このレジスタをカウンタに指定しているものがあります(LOOP、REP など)。また、シフト命令においてシフトカウントの指定に使用できるレジスタは CL レジスタだけです。
DX 汎用レジスタ (CH+CL)
特徴はありませんが、乗算命令などでは AX レジスタと対で 32 ビット値を表すのに使用されることがあります。
SI 汎用レジスタ
DI 汎用レジスタ
これらのレジスタは、インデクスレジスタとしてアドレス指定に使用できます。また、ストリング命令(MOVS など)では、これらのレジスタの使用が強制されています。
BP 汎用レジスタ:ベースポインタ
このレジスタは、ベースレジスタとしてアドレス指定に使用できます。他のインデクス/ベースレジスタとは違い、このレジスタによるメモリ参照はセグメントレジスタ SS をデフォルトで使用します。
SP 汎用レジスタ:スタックポインタ
このレジスタはスタックポインタであり、セグメントレジスタとしては SS レジスタを使用します。
CS コードセグメントレジスタ
コード用のセグメントレジスタです。命令ポインタ IP は常にこのセグメントレジスタを使用します。
DS データセグメントレジスタ
データ用のデフォルトセグメントレジスタです。一般にデータ参照はこのセグメントレジスタを使用すると最も効率的です。
ES エクストラセグメントレジスタ
データ用のセグメントレジスタです。一般には DS レジスタを使用する方が効率的ですが、ストリング命令などではこのレジスタの使用が強制されていることもあります。
SS スタックセグメントレジスタ
スタック用のセグメントレジスタです。SP、BP によるメモリ参照時はこのセグメントレジスタが(デフォルトで)使用されます。
IP 命令ポインタ
現在実行されているコードのアドレスが CS:IP で示されています。
FLAGS ステータスフラグレジスタ
このレジスタの各ビットは各プロセッサ命令の結果によってセット/クリアされます。次に各ビットの意味を示します。
ビット | 略号 | 名前 | セットされる場合 |
0 | CF | キャリーフラグ | MSBからのオーバー/ボロー発生時 |
2 | PF | パリティフラグ | 下位 8 ビット中で値 1 のビットの合計数が偶数個になったとき |
4 | AF | 補助キャリーフラグ | ビット 3 からのオーバー/ボロー発生時 |
6 | ZF | ゼロフラグ | ゼロになったとき |
7 | SF | サインフラグ | MSBが 1 になったとき |
8 | TF | トラップフラグ | シングルステップモード指定時 |
9 | IF | 割り込み許可フラグ | 外部(ハードウエア)割り込みの許可時 |
10 | DF | 方向フラグ | STD 命令(ストリング命令で使用) |
11 | OF | オーバフローフラグ | MSBへのオーバー/ボロー発生時 |