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