戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2011年 秋期 午前(科目A)10


問題文

CPUのプログラムレジスタ(プログラムカウンタ)の役割はどれか。

選択肢

演算を行うために、メモリから読み出したデータを保持する。
条件付き分岐命令を実行するために、演算結果の状態を保持する。
命令のデコードを行うために、メモリから読み出した命令を保持する。
命令を読み出すために、次の命令が格納されたアドレスを保持する。(正解)

##: CPUのプログラムレジスタ(プログラムカウンタ)の役割はどれか。【午前2 解説】

要点まとめ

  • 結論:プログラムカウンタ(PC)は「次に実行すべき命令が格納されたメモリのアドレス」を保持する専用レジスタであると覚えてください。
  • 根拠:命令フェッチ段でCPUはPCの示すアドレスから命令を読み出し、その後PCを更新することで命令列の逐次実行や分岐制御を行います。
  • 差がつくポイント:PCは命令そのものや演算結果やフラグを保持しない点、命令を保持するのは命令レジスタ(IR)やデータレジスタの役割である点を区別しましょう。

正解の理由

選択肢の中で唯一、プログラムカウンタの定義に合致するのがです。プログラムカウンタは命令フェッチのために「次に実行する命令が格納されたアドレス」を保持します。CPUはこのアドレスを使ってメモリから命令を読み出し、フェッチ後にPCを次の命令へ進める(通常は命令長分増加、分岐時は分岐先に変更)ことで命令実行の流れを制御します。

よくある誤解

  • 「PCは命令そのものを保持する」と誤認する点:命令自体を保持するのは命令レジスタ(IR)であり、PCは命令の格納場所(アドレス)を保持します。
  • 「条件分岐の判定に使う状態を保持する」と勘違いする点:条件判定に用いるフラグやステータスはフラグレジスタ(ステータスレジスタ)の役割です。
  • 「メモリから読み出したデータを保持する」と混同する点:データは汎用レジスタやMDR(Memory Data Register)が保持します。

解法ステップ

  1. 問題文で「プログラムレジスタ(プログラムカウンタ)の役割」を問うていることを確認する。
  2. 各選択肢のキーワードをCPUのフェッチ・デコード・実行サイクルに当てはめる。
  3. 「アドレスを保持する」か「命令やデータ、状態を保持する」かで区別する。PCはアドレス保持が正しい。
  4. 分岐・割り込みなどでPCが更新される点を思い出して、正答を選ぶ。

選択肢別の誤答解説

  • ア: 「演算を行うために、メモリから読み出したデータを保持する。」
    → 誤り。メモリから読み出したデータは汎用レジスタやMDR(Memory Data Register)が保持し、PCはアドレス保持に関与しません。
  • イ: 「条件付き分岐命令を実行するために、演算結果の状態を保持する。」
    → 誤り。条件の状態(ゼロフラグ、キャリーフラグなど)はステータスレジスタやフラグレジスタに格納され、PCはその判定に基づき更新されるだけです。
  • ウ: 「命令のデコードを行うために、メモリから読み出した命令を保持する。」
    → 誤り。命令を保持してデコードするのは命令レジスタ(IR)の役割であり、PCは命令へのアドレスを指します。
  • : 「命令を読み出すために、次の命令が格納されたアドレスを保持する。」
    → 正解。PCは常に「次に読み出す命令のアドレス」を保持し、フェッチ後に更新されます。

補足コラム

  • PCの更新方法:多くのRISC系では命令長が固定(例:4バイト)なのでフェッチ後に のように更新します。CISC系や可変長命令体系では命令長に応じて増分します。
  • 分岐・割り込み:分岐命令はPCを書き換えて実行流を変更し、割り込み時は戻り先のアドレスを保存してPCを割り込みハンドラに設定します。
  • 実装上の差異:x86では「IP(Instruction Pointer)」、ARMでは「PC」と呼ばれることが多く、幅(32ビット/64ビット)やパイプラインの影響でフェッチ中のPC値が1命令先を指す実装もあります。
  • 簡易シミュレーション(Python例):
pc = 0x1000
instruction_length = 4  # バイト
# 命令をフェッチ(擬似)
def fetch(pc):
    # 実際はメモリから命令を読み出す
    return f"INSTR_AT_{hex(pc)}"

# フェッチしてPCを進める
instr = fetch(pc)
pc += instruction_length
print(instr, hex(pc))

FAQ

Q1: PCとIRの違いは?
A1: PCは「次の命令のアドレス」を保持するレジスタ、IRはそのアドレスから読み出された「命令そのもの」を保持してデコードします。
Q2: 分岐命令が実行されるとPCはどうなる?
A2: 分岐命令が実行されるとPCは分岐先のアドレスに更新され、次のフェッチはそのアドレスから行われます。条件分岐の場合はフラグの判定結果によりPC更新の有無が決まります。
Q3: 割り込み時のPCの扱いは?
A3: 割り込み発生時は通常、現在の次実行アドレス(または戻り先アドレス)をスタックや指定レジスタに保存し、PCを割り込みハンドラの先頭アドレスに設定します。
Q4: 「PCは読み取り専用か?」
A4: いいえ。プログラムやハードウェア(分岐命令、割り込み、システムコールなど)によってPCを書き換えることが可能です。

関連キーワード: CPU、プログラムカウンタ、プログラムレジスタ、命令フェッチ、命令レジスタ、分岐制御、割り込み、PC更新、フェッチデコード実行、アドレス保持
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について