ITパスポート 2012年 春期 問61
問題文
CPUにおけるプログラムカウンタの説明はどれか。
選択肢
ア:次に実行する命令が入っている主記憶のアドレスを保持する。(正解)
イ:プログラムの実行に必要な主記憶領域の大きさを保持する。
ウ:プログラムを構成する命令数を保持する。
エ:命令実行に必要なデータが入っている主記憶のアドレスを保持する。
🔒 解説は解答すると表示されます
CPUにおけるプログラムカウンタの説明はどれか。【ITパスポート 解説】
正解の理由
ア「次に実行する命令が入っている主記憶のアドレスを保持する。」が正解です。
プログラムカウンタ(PC)はプログラムの「次に実行すべき命令」がどこにあるかを指し示すレジスタです。CPU(CPU(Central Processing Unit:中央処理装置))が命令を実行する際、まずその命令が置かれている主記憶(主記憶=メモリ)から命令を取り出す必要があります。PCはその取り出し先(=主記憶のアドレス)を保持しておき、命令を順に取り出せるようにします。したがって「アドレスを保持する」という記述が正しく、内容そのもの(命令のデータ)やプログラムのサイズではありません。
プログラムカウンタ(PC)はプログラムの「次に実行すべき命令」がどこにあるかを指し示すレジスタです。CPU(CPU(Central Processing Unit:中央処理装置))が命令を実行する際、まずその命令が置かれている主記憶(主記憶=メモリ)から命令を取り出す必要があります。PCはその取り出し先(=主記憶のアドレス)を保持しておき、命令を順に取り出せるようにします。したがって「アドレスを保持する」という記述が正しく、内容そのもの(命令のデータ)やプログラムのサイズではありません。
解法ステップ
- 「プログラムカウンタ(PC)」の役割を思い出す。ポイントは「どんな情報を持つか:アドレスか、サイズか、命令数か、データのアドレスか」。
- 各選択肢のキーワードで照合する。PCは「次に実行する命令のアドレス」を持つため、「アドレスを保持する」が合致する。
- 他の選択肢が示すもの(主記憶領域の大きさ、命令数、データのアドレス)はPCの役割ではないので消去する。
- 比較のために関連するレジスタも確認する(例:命令レジスタ(IR:Instruction Register)は実際の命令を保持、主記憶アドレスレジスタ(MAR:Memory Address Register)はメモリアクセス時のアドレス保持など)。
選択肢別の誤答解説
- ア:正しい。PCは「次に実行する命令がある主記憶のアドレス」を保持する。命令の取り出し(フェッチ)時に使われ、通常は命令長に合わせて自動で増加(インクリメント)するか、分岐命令で別の値に設定されます。
- イ:誤り。プログラムの実行に必要な主記憶領域の大きさ(プログラムサイズ)はファイルのメタ情報やリンカ・ローダが管理する情報で、PCが保持するものではありません。
- ウ:誤り。プログラムを構成する命令数(命令の総数)もPCの役割ではありません。命令数はプログラムの性質やコンパイル結果で決まる情報です。
- エ:誤り。命令実行に必要なデータが入っている主記憶のアドレスは、データアクセス時に使うアドレスレジスタ(主記憶アドレスレジスタ:MAR)やインデックスレジスタ、ベースレジスタなどが扱います。PCは命令のアドレスを扱う点が異なります。
よくある誤解
- 「PCは現在実行中の命令を保持する」
→ 実際には現在実行中の命令自体は命令レジスタ(IR)に入ります。PCは次に取ってくる命令の住所を指します。例えると、PCは「しおり(次に読むページ)」、IRは「開いているページの内容」です。 - 「PCはプログラムの大きさや命令数を表す」
→ PCは位置(どこを読むか)を示すもので、サイズや総数とは無関係です。 - 「PCはデータのアドレスも持つ」
→ データ用のアドレスは別のレジスタやアドレス生成回路が扱います。PCは命令のアドレス専用と考えるとわかりやすいです。
補足コラム
- 名前の由来:Program Counter(プログラムカウンタ)という名前は「次に実行する命令の番地を数える(カウントする)」という意味から来ています。別名で「Instruction Pointer(IP:命令ポインタ)」と呼ばれることもあります(特にx86系)。
- 動作の流れ:通常はPCに入っている値を使って主記憶から命令を読み出し、その後PCは次の命令位置に進むよう自動で増加(+1、あるいは命令長分)します。ジャンプや分岐命令ではPCに別の値をセットして実行の流れを変えます。
- モダンCPUでは:パイプライン処理や分岐予測があり、PCは単純に「次の番号」ではなく「フェッチすべきアドレス群」を管理する役割を持つ場合がありますが、基本概念は同じです。
FAQ
Q1. PCは人が直接読めますか?
A1. 命令セットやデバッガを使えば、PCの値(アドレス)を見ることはできます。プログラム的に参照できる命令セットもありますが、CPUやOSの設計で扱いが異なります。
A1. 命令セットやデバッガを使えば、PCの値(アドレス)を見ることはできます。プログラム的に参照できる命令セットもありますが、CPUやOSの設計で扱いが異なります。
Q2. 割り込み(interrupt)が起きたときPCはどうなる?
A2. 通常は現在のPCの値(戻り先)をスタックや特別なレジスタに保存してから、割り込み処理用のアドレスにPCを設定します。処理終了後に保存した値を戻して元の実行に復帰します。
A2. 通常は現在のPCの値(戻り先)をスタックや特別なレジスタに保存してから、割り込み処理用のアドレスにPCを設定します。処理終了後に保存した値を戻して元の実行に復帰します。
Q3. 「命令レジスタ(IR)」と「PC」はどう違う?
A3. IRは「取り出した命令そのもの(内容)」を保持します。PCは「次に取り出す命令の場所(アドレス)」を保持します。役割が異なるため混同しないようにしましょう。
A3. IRは「取り出した命令そのもの(内容)」を保持します。PCは「次に取り出す命令の場所(アドレス)」を保持します。役割が異なるため混同しないようにしましょう。
Q4. 「PC」と「スタックポインタ(SP)」は同じものですか?
A4. 違います。SPは関数呼び出しやローカル変数のためのスタック領域の位置(頂点)を指すレジスタです。PCは命令の場所を指します。
A4. 違います。SPは関数呼び出しやローカル変数のためのスタック領域の位置(頂点)を指すレジスタです。PCは命令の場所を指します。
関連キーワード: CPU、プログラムカウンタ、PC、主記憶、命令レジスタ、MAR、アドレス、レジスタ、制御ユニット、命令フェッチ、分岐、スタックポインタ、割り込み、インストラクションポインタ

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

