Skip to the content.

最終更新日:2026年8月29日

まず結論

CPU内部のレジスタは、何を保持するかで切り分けます。

まず、問題文に出てくるものが データ・命令・アドレス・演算結果の状態 のどれなのかを確認すると判断しやすくなります。

演算に使うデータ?
→ データレジスタ・汎用レジスタ

読み出した命令そのもの?
→ 命令レジスタ

次の命令がある場所(アドレス)?
→ プログラムカウンタ

演算結果が0か、桁上がりしたかなどの状態?
→ フラグレジスタ
レジスタ・装置 主に保持するもの
プログラムカウンタ 次に実行する命令のアドレス
命令レジスタ 主記憶から読み出した現在の命令
インデックスレジスタ アドレス計算に加える添字の値
データレジスタ 演算や転送に使うデータ
汎用レジスタ データ・途中結果・アドレスなど
アキュムレータ 主に演算結果
フラグレジスタ 演算結果の状態
データキャッシュ よく使うデータのコピー

基本情報技術者試験では、次の判断軸が重要です。

割込み後に元の場所から処理を再開する
→ プログラムカウンタを退避・復元する

住所はプログラムカウンタ、命令の中身は命令レジスタ、計算用の値はデータ系レジスタ。

直感的な説明

プログラムカウンタは、本のしおりのようなものです。

本を読む途中で電話に出ても、しおりがあれば元のページから読書を再開できます。

CPUでも同じです。

通常のプログラムを実行
↓
割込みが発生
↓
プログラムカウンタを退避
↓
割込み処理を実行
↓
プログラムカウンタを復元
↓
元の処理を再開

一方、命令レジスタは、しおりが示した場所から取り出した命令の内容を置く場所です。

プログラムカウンタ
→ 次に読む場所

命令レジスタ
→ 読み出した命令そのもの

場所を覚えるのか、内容を覚えるのかで切り分けます。

定義・仕組み

CPUは、命令をおおむね次の流れで実行します。

1. 次の命令の場所を確認する
2. 主記憶から命令を読み出す
3. 命令を保持する
4. 命令を解読する
5. 必要なデータを読み込む
6. 演算する
7. 結果や状態を保存する

各レジスタを対応させると、次のようになります。

プログラムカウンタ
↓ 次の命令のアドレスを示す
主記憶
↓ 命令を読み出す
命令レジスタ
↓ 命令を保持する
命令デコーダ
↓ 命令を解読する
演算装置
↓ 演算する
データレジスタ・汎用レジスタ・アキュムレータ
→ データや演算結果を保持する

この流れを先に整理したい場合は、CPUの命令実行サイクルとは?フェッチ・解読・オペランド読出し・実行の順番を確認すると、各レジスタがどの段階で関わるのかをつなげて理解できます。

プログラムカウンタ

次に実行する命令のアドレスを保持します。

次はどこを読むか
→ プログラムカウンタ

通常は命令を読み出すたびに、次の命令を指すように更新されます。分岐命令では、分岐先のアドレスが設定されます。

命令レジスタ

主記憶から読み出した、現在実行する命令そのものを保持します。

主記憶
↓
命令レジスタ
↓
命令デコーダ

命令レジスタの内容は命令デコーダへ渡され、どの処理を行う命令なのかが解読されます。

インデックスレジスタ

配列などの要素を順番に参照するとき、アドレス計算へ加える値を保持します。

基準となるアドレス
+
インデックスレジスタの値
=
実際に参照するアドレス

試験では、次の表現が判断材料になります。

配列
添字
繰返し
アドレス部に値を加える
→ インデックスレジスタ

アドレス指定方式との関係は、アドレス指定方式の記事でも確認できます。

データレジスタ

演算やデータ転送に使う値を一時的に保持します。

主記憶から読み出したデータ
演算に使う値
転送中の値
→ データレジスタ

CPUによって名称や役割の分け方は異なり、汎用レジスタと近い意味で使われることもあります。FE試験では、問題文に「データを一時保持」とあれば、命令やアドレスではなくデータを保持するレジスタだと判断します。

汎用レジスタ

演算に使うデータ、途中結果、アドレスなどを一時的に保持します。

計算に使う値
途中の結果
一時的なアドレス
→ 汎用レジスタ

「汎用」という名前のとおり、用途が一つに固定されていません。

アキュムレータ

主に演算結果を保持するレジスタです。

演算結果
→ アキュムレータ

現在のCPUでは、汎用レジスタが同様の役割を兼ねることもあります。

フラグレジスタ

演算結果そのものではなく、演算結果の状態を保持します。

  • 結果が0か
  • 桁上がりが発生したか
  • 結果が負か
  • オーバーフローしたか
演算を実行
↓
結果の状態をフラグへ記録
↓
条件分岐で利用

データキャッシュ

CPUがよく使うデータのコピーを保持し、主記憶へのアクセスを減らす高速な記憶領域です。

CPU
↓ 高速
データキャッシュ
↓
主記憶

キャッシュはCPUに内蔵されることがありますが、レジスタとは別の記憶階層です。

割込み発生時の退避と復元

割込みが発生すると、CPUは実行中のプログラムをいったん中断し、割込み処理へ移ります。

処理を中断した場所へ戻るには、プログラムカウンタの値を失わないようにする必要があります。

1. 割込みが発生する
2. プログラムカウンタなどをスタックへ退避する
3. 割込み処理の開始アドレスを設定する
4. 割込み処理を実行する
5. 退避した値を復元する
6. 元のプログラムを再開する
退避
→ あとで戻すために一時保存する

復元
→ 保存していた値を元へ戻す

割込みの分類や基本的な流れは、内部割込みと外部割込みの記事でも整理しています。

科目Aでどう出る?

科目Aでは、説明文やCPU内部の図を見て、該当するレジスタを選ぶ問題が出ます。

最初に、「何を保持している説明なのか」を分類します。

データ
→ データレジスタ・汎用レジスタ

命令
→ 命令レジスタ

命令のアドレス
→ プログラムカウンタ

演算結果の状態
→ フラグレジスタ

「メモリから読み出す」という言葉だけでは決めません。読み出したものがデータなのか、命令なのかまで確認します。

問題文の表現 選ぶもの
次の命令が格納されたアドレス プログラムカウンタ
割込み後に元の場所から再開 プログラムカウンタ
主記憶から読み出した現在の命令 命令レジスタ
配列の添字をアドレスへ加える インデックスレジスタ
演算や転送に使うデータ データレジスタ
データや途中結果を幅広く保持 汎用レジスタ
演算結果を保持 アキュムレータ
ゼロ・桁上がりなどの状態 フラグレジスタ
よく使うデータを高速に保持 データキャッシュ

選択肢を4方向に切る

似た説明が並んだら、次の順で切り分けると安定します。

問題文で中心になっているもの 判断
演算に使うデータ データレジスタ・汎用レジスタ
条件分岐に使う演算結果の状態 フラグレジスタ
読み出した命令そのもの 命令レジスタ
次に読む命令のアドレス プログラムカウンタ

特に、「命令」と「命令のアドレス」は別物です。

命令そのもの
→ 命令レジスタ

命令が置かれている場所
→ プログラムカウンタ

割込み問題の判断手順

中断した処理を元の場所から再開したい
↓
戻る場所のアドレスが必要
↓
アドレスを保持するのはプログラムカウンタ

4種類を一言で切る

用語 一言でいうと
インデックスレジスタ 配列の位置をずらす
データレジスタ データを一時保存する
プログラムカウンタ 次の命令の場所を覚える
命令レジスタ 現在の命令を覚える

図を見たときの判断基準

図の位置・接続 選びたい装置
次の命令の場所を主記憶へ示す プログラムカウンタ
主記憶と命令デコーダの間 命令レジスタ
アドレス計算へ加算される インデックスレジスタ
演算装置へデータを渡す データレジスタ・汎用レジスタ
演算装置の結果を受け取る アキュムレータ・汎用レジスタ
演算結果の状態を記録する フラグレジスタ
CPUと主記憶の速度差を埋める キャッシュ

どんな場面で使う?

プログラムカウンタ

命令の実行順序、分岐、ジャンプ、割込み後の再開位置を管理するときに使います。

命令レジスタ

現在実行する命令を保持し、命令デコーダへ渡すときに使います。

インデックスレジスタ

配列や表の要素を順番に参照するときに使います。

データレジスタ・汎用レジスタ・アキュムレータ

演算対象の値、転送する値、途中結果、演算結果を一時的に保持するときに使います。

フラグレジスタ

比較結果や演算結果を使って条件分岐するときに使います。

データキャッシュ

主記憶から同じデータを何度も読み出す負担を減らし、処理を高速化するときに使います。

よくある誤解・混同

プログラムカウンタと命令レジスタ

プログラムカウンタ
→ 次の命令の住所

命令レジスタ
→ 現在の命令の内容

住所を持つのがプログラムカウンタ、内容を持つのが命令レジスタ。

「メモリから読み出した」なら命令レジスタ?

そうとは限りません。

主記憶から読み出すものには、命令だけでなく演算に使うデータもあります。

読み出したデータ
→ データレジスタ・汎用レジスタ

読み出した命令
→ 命令レジスタ

どこから読み出したかではなく、何を保持しているかで判断します。

割込み時は命令レジスタを保存すればよい?

命令レジスタには命令の内容が入っていますが、それだけではプログラム全体のどこへ戻るか分かりません。

命令の内容が分かる
≠
命令が置かれている場所が分かる

処理の再開には、戻り先のアドレスを保持するプログラムカウンタが必要です。

プログラムカウンタは現在の命令を指す?

名称やCPUの動作段階によって説明の仕方に差はありますが、FE試験では基本的に「次に実行する命令のアドレスを保持する」と整理します。

割込みでは、再開時に必要な命令位置を保存するものとして判断します。

インデックスレジスタとプログラムカウンタ

どちらもアドレスに関係しますが、役割が違います。

インデックスレジスタ
→ データの参照位置をずらす

プログラムカウンタ
→ 次の命令位置を示す

データレジスタと命令レジスタ

データレジスタ
→ 演算や転送に使うデータ

命令レジスタ
→ CPUが実行する命令

「何かを保持する」という点だけでなく、保持する内容を確認します。

汎用レジスタとアキュムレータ

汎用レジスタ
→ データや途中結果を幅広く保持

アキュムレータ
→ 主に演算結果を保持

フラグレジスタは演算結果を保持する?

フラグレジスタが保持するのは、演算結果そのものではなく状態です。

演算結果そのもの
→ 汎用レジスタやアキュムレータ

演算結果の状態
→ フラグレジスタ

プログラムカウンタは命令数を数える?

「カウンタ」という名前ですが、実行した命令数を数えるものではありません。保持するのは命令のアドレスです。

キャッシュはレジスタと同じ?

同じではありません。

レジスタ
↓
キャッシュ
↓
主記憶
↓
補助記憶

上ほど高速で小容量、下ほど低速で大容量です。

まとめ(試験直前用)

  • データ・命令・アドレス・状態のどれを保持するかでレジスタを切り分ける
  • 次の命令のアドレスを保持するのがプログラムカウンタ
  • 現在の命令を保持するのが命令レジスタ
  • 演算や転送に使う値はデータレジスタ・汎用レジスタ
  • 演算結果の状態はフラグレジスタ
  • 「メモリから読み出す」だけで決めず、読み出したものが何かを見る
  • 割込み後に元の場所から再開するため、プログラムカウンタを退避・復元する
データ?
→ データ系レジスタ

命令そのもの?
→ 命令レジスタ

次の命令の場所?
→ プログラムカウンタ

結果の状態?
→ フラグレジスタ

住所はプログラムカウンタ、命令の中身は命令レジスタ、計算用の値はデータ系レジスタ。

© 2024-2026 stemtazoo. All rights reserved.