命令レジスタ
CPUが主記憶から取り出した(フェッチした)命令を、解読して実行するまでの間、一時的に保持しておくレジスタ。命令レジスタの内容は、命令デコーダに渡される。
イマシルちゃんの解説
料理をするとき、レシピの本から次の手順を1つ読んで、手元のメモに書き写すとするよ。
本のどのページを読むかを覚えておく「しおり」と、
今やる手順を書いておく「手元のメモ」があれば、迷わずに料理を進められるよね。
CPUの中にも、この「しおり」と「メモ」の役目をする、小さな記憶の場所があるんだ。
より深い解説
命令実行の流れ
CPUは、次のサイクルを繰り返して、プログラムを実行する。
| 段階 | 内容 | 使う構成要素 |
|---|---|---|
| 1. 命令の取出し(フェッチ) | プログラムカウンタが示す番地の命令を、主記憶から読み出す | プログラムカウンタ、命令レジスタ |
| 2. 命令の解読(デコード) | 命令レジスタの命令を解読し、何をするかを決める | 命令デコーダ |
| 3. オペランドの読出し | 演算に使うデータを、レジスタや主記憶から読み出す | 汎用レジスタ |
| 4. 実行 | 演算を行う | ALU(演算装置) |
| 5. 結果の書込み | 結果を、レジスタや主記憶に書き込む | 汎用レジスタ、アキュムレータ |
フェッチした命令は、「主記憶 → 命令レジスタ → 命令デコーダ」の順に渡される。
主なレジスタ
| レジスタ | 役割 |
|---|---|
| プログラムカウンタ(プログラムレジスタ) | 次に実行する命令が格納されている主記憶の番地を保持する。命令を取り出すたびに、次の番地に進む |
| 命令レジスタ | 取り出した命令そのものを保持する |
| アキュムレータ | 演算の結果を一時的に保持する |
| 汎用レジスタ | データや番地など、様々な値を一時的に保持する |
| フラグレジスタ | 演算結果がゼロか、負か、桁あふれしたかなどを保持する |
プログラムカウンタは「どこから取り出すか」という番地を持ち、命令レジスタは「取り出した命令」を持つ。
データキャッシュとの区別
キャッシュメモリは、主記憶とCPUの速度の差を埋めるための高速な記憶装置で、命令用(命令キャッシュ)とデータ用(データキャッシュ)に分けることがある。フェッチした命令がデコーダに渡る前に保持される場所は、命令レジスタである。