メモリから取り出した命令を一時的に保持するレジスタ
命令レジスタ(IR:Instruction Register)とは、メモリから取り出した(フェッチした)命令を、解読・実行する間だけ一時的に保持しておくレジスタのことです。レジスタ=CPUの中にある超高速の小さな記憶場所のことです。
身近な例で言うと、料理人が冷蔵庫(メモリ)からレシピカード1枚を取り出して、調理台の譜面台(IR)に立てておくようなものです。譜面台にレシピを置いておけば、調理中に「次は塩を入れる」と何度でも見返せます。IRも同じで、1つの命令を実行し終えるまでその命令を手元に保持し続けます。
上のツールで▶ボタンを押すと、メモリから取り出された命令が赤いIRに格納され、その後デコーダへ送られていく様子が見られます。IRが「空」から「命令あり」に変わる瞬間に注目してください。
命令フェッチとは「メモリから命令を取り出してくる」動作のことです。IRは、このフェッチで取り出した命令の受け皿(置き場所)として働きます。フェッチとIRは、いわばセットの関係です。
CPUが命令を実行する流れは「命令実行サイクル」と呼ばれ、フェッチはその最初の段階です。IRが関わるのは次の流れです。
・① 番地の指定:プログラムカウンタ(PC)が指す番地をメモリへ送る
・② フェッチ:その番地にある命令をメモリから読み出す
・③ IRへ格納:読み出した命令を命令レジスタ(IR)に入れる
・④ デコード:IRの中身を解読する
・⑤ 実行:解読結果に従って命令を実行する
ここで大事なのは、PCとIRは役割が違うという点です。混同しやすいので注意しましょう。
・PC(プログラムカウンタ):次に実行する命令の「番地(住所)」を持つ
・IR(命令レジスタ):取り出した命令「そのもの(中身)」を持つ
郵便で例えると、PCは「宛先の住所」、IRは「届いた手紙の中身」です。住所をもとに手紙を取り寄せ、その手紙を机(IR)に広げて読む──この一連が「フェッチしてIRに入れる」という動作にあたります。
IRに命令が入ったら、次はデコード(解読)です。デコードとは「命令が何をしろと言っているのかを読み解く」処理のこと。IRはこのデコード処理の入り口(橋渡し役)になります。
命令は大きく2つの部分に分かれています。命令デコーダはIRの中身を読み取り、これらを切り分けます。
・命令コード部(オペコード部):「何をするか」(加算・転送・分岐など)
・オペランド部:「何に対して行うか」(対象のレジスタや番地)
デコーダはこの解読結果から、CPUの各部へ「ALU(演算装置)で足し算せよ」「R1とR2を読み出せ」といった制御信号を生成します。もしIRがなければ、命令を解読している間に元の命令が分からなくなってしまいます。IRが命令を保持し続けるからこそ、フェッチ → デコード → 実行という流れが途切れずにつながるのです。
「命令そのものを置いておく=命令レジスタ(IR)」「次の番地を持つ=プログラムカウンタ(PC)」とセットで理解しておくと、両者の役割を取り違えずに済みます。