FE EXAM

命令レジスタ(IR)

メモリから取り出した命令を一時的に保持するレジスタ

INTERACTIVE VISUALIZATION
メモリ
命令レジスタ(IR)
デコーダ
命令の番地
0x100
IRの中身
— 空 —
現在のフェーズ
IDLE
命令フェッチ → デコード

▶ または「次へ」で、メモリ → フェッチ → 命令レジスタ(IR) → デコード の流れを順に追えます。

ステップ 1 / 6
STEP 1/6初期状態:PCが命令の番地を保持プログラムカウンタ(PC)には次に実行する命令の番地 0x100 が入っています。命令レジスタ(IR)はまだ空っぽです。IR=「メモリから取り出した命令を一時的に保持するレジスタ」のことで、これから命令がここに格納されます。
PC番地 0x100メモリ命令を格納命令レジスタ IR命令デコーダ意味を解読フェッチ(命令の取り出し)
解説

📌
命令レジスタとは

メモリADD R1,R2取り出す命令レジスタ IRADD R1,R2取り出した命令を一時的に保持する

命令レジスタ(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に入れる」という動作にあたります。

🔍
デコードへの橋渡し

IRADD R1,R2ADD(何を)R1,R2(対象)制御信号へIRの内容を命令コード部とオペランド部に分解

IRに命令が入ったら、次はデコード(解読)です。デコードとは「命令が何をしろと言っているのかを読み解く」処理のこと。IRはこのデコード処理の入り口(橋渡し役)になります。

命令は大きく2つの部分に分かれています。命令デコーダはIRの中身を読み取り、これらを切り分けます。
命令コード部(オペコード部):「何をするか」(加算・転送・分岐など)
オペランド部:「何に対して行うか」(対象のレジスタや番地)

デコーダはこの解読結果から、CPUの各部へ「ALU(演算装置)で足し算せよ」「R1とR2を読み出せ」といった制御信号を生成します。もしIRがなければ、命令を解読している間に元の命令が分からなくなってしまいます。IRが命令を保持し続けるからこそ、フェッチ → デコード → 実行という流れが途切れずにつながるのです。

「命令そのものを置いておく=命令レジスタ(IR)」「次の番地を持つ=プログラムカウンタ(PC)」とセットで理解しておくと、両者の役割を取り違えずに済みます。

関連コンテンツ