最終更新日:2026年10月6日
fe fe-technology computer-architecture cpu register
まず結論
プログラムカウンタ(PC:Program Counter)は、次に実行する命令のアドレスを保持するレジスタです。
基本情報技術者試験では、次の流れで判断します。
中断した処理を再開したい
↓
戻るための命令位置が必要
↓
プログラムカウンタ
割込みが発生すると、元の処理へ戻れるように、プログラムカウンタなど必要なCPUの状態を退避します。割込み処理が終わったら状態を復元し、中断していた処理を再開します。
直感的な説明
プログラムカウンタは、本を読むときのしおりのようなものです。
通常処理
↓
割込み発生
↓
戻る位置などを保存
↓
割込み処理
↓
状態を復元
↓
通常処理を再開
本を閉じる前にしおりを挟むように、CPUも別の処理へ移る前に「どこへ戻ればよいか」を残しておく必要があります。
次はどこ? → プログラムカウンタ
定義・仕組み
CPUには、処理に必要な情報を高速に保持するレジスタがあります。プログラムカウンタは、その中でも命令の実行順序に関係するレジスタです。
通常は、次に実行する命令のアドレスを示し、命令実行に伴って更新されます。
割込みが発生したらどうなる?
割込みとは、実行中の処理をいったん中断し、優先して別の処理を行う仕組みです。
通常処理
↓
割込み発生
↓
戻るために必要な状態を退避
↓
割込み処理へ移る
↓
割込み処理
↓
退避した状態を復元
↓
通常処理を再開
ここで重要なのが、元の処理へ戻る位置です。
プログラムカウンタが保持していた命令位置に関する情報を退避しておけば、割込み処理の終了後に復元して、元のプログラムへ戻れます。
実際のCPUでは、割込み時に保存される情報や保存方法はアーキテクチャによって異なります。FEでは細かな実装より、「再開位置に関係するのはプログラムカウンタ」という役割を押さえることが重要です。
科目Aでどう出る?
科目Aでは、レジスタの役割を説明文から選ぶ問題として出題されます。
| 問題文の手掛かり | 判断するレジスタ |
|---|---|
| 次に実行する命令のアドレス | プログラムカウンタ |
| 現在取り出した命令を保持 | 命令レジスタ |
| 演算対象などのデータを保持 | データレジスタ |
| アドレス計算の修飾などに使う | インデックスレジスタ |
特に重要なのが、プログラムカウンタと命令レジスタの違いです。
プログラムカウンタ
→ 次はどこ?
命令レジスタ
→ 今の命令は何?
「中断した処理を再開する」という表現があれば、戻る場所を覚えておく必要があると考えます。
どんな場面で使う?
通常の命令実行
CPUがプログラムを順番に実行するとき、プログラムカウンタを使って次の命令位置を管理します。
分岐やジャンプ
条件分岐やジャンプでは次に実行する位置が変わるため、プログラムカウンタの内容も変更されます。
割込み処理
割込みでは一時的に別の処理へ移るため、元の処理へ戻るための情報が必要になります。
試験では、この「戻る位置」とプログラムカウンタを結び付けるのがポイントです。
よくある誤解・混同
命令レジスタを保存すれば元の場所へ戻れる
命令レジスタは、現在取り出している命令を保持するレジスタです。
命令レジスタ
→ 今、何の命令を扱っている?
プログラムカウンタ
→ 次に、どこの命令を実行する?
「どこから再開するか」が問われているなら、プログラムカウンタを選びます。
データレジスタは命令位置を覚える
違います。データレジスタは演算対象などのデータを保持するために使われます。
データ
→ データレジスタ
命令の位置
→ プログラムカウンタ
インデックスレジスタは割込みからの復帰位置を保持する
違います。インデックスレジスタは、主にアドレス計算を修飾するために利用されます。
名前だけで選ばず、何の情報を扱うかを見るのがポイントです。
プログラムカウンタには現在実行中の命令そのものが入っている
違います。
命令そのもの
→ 命令レジスタ
次の命令のアドレス
→ プログラムカウンタ
まとめ(試験直前用)
- プログラムカウンタは、次に実行する命令のアドレスを保持する
- 割込みでは、元の処理へ戻るために必要なCPU状態を退避・復元する
- 「中断した場所から再開」なら、プログラムカウンタを連想する
- 命令レジスタは「今の命令」、プログラムカウンタは「次はどこ」
- データレジスタはデータ、インデックスレジスタはアドレス計算などに使う
試験直前は、この2行で切り分けます。
次はどこ?
→ プログラムカウンタ
今の命令は何?
→ 命令レジスタ
「再開する場所」が問われたら、プログラムカウンタ。