本文へスキップ

平成24年度 春期 ITパスポート試験 問61

この問題の解説と、これまでの解答の記録です。

問61
頻出度★☆☆

CPU におけるプログラムカウンタの説明はどれか。

出典 平成24年度 春期 ITパスポート試験 問61
解説

問 61

  • ア

    正解 正解はア。プログラムカウンタ (program counter、命令アドレスレジスタ、逐次制御カウンタとも呼ばれる) は、CPU の制御装置の中にあるレジスタで、次に実行する命令が入っている主記憶のアドレスを保持する。CPU は命令を「取り出す (フェッチ) → 解読する (デコード) → 実行する」というサイクルを繰り返すが、その最初のステップで、プログラムカウンタが指し示すアドレスから命令を主記憶に読みに行く。取り出した命令は命令レジスタに移され、同時にプログラムカウンタの値は次の命令を指すように自動的に更新される (命令長ぶん進められる)。この自動更新があるおかげで、プログラムは書かれた順に上から下へ次々と実行されていく。分岐命令 (ジャンプ) やサブルーチン呼出しの場合は、この自動更新の代わりに分岐先のアドレスがプログラムカウンタに設定され、そこから実行が続く。つまりプログラムカウンタは「CPU が次にどこを実行するかを指す矢印」であり、その中身は命令そのものでも個数でもなく、あくまで主記憶上のアドレス (番地) である。よってアが正しい説明である。

  • 不正解イ

    プログラムの実行に必要な主記憶領域の大きさを保持するのはプログラムカウンタではない。プログラムを実行するためにどれだけのメモリ領域を確保するかは、OS の記憶管理 (メモリ管理) 機能がプログラムのロード時に管理する情報であり、CPU 内のレジスタが常時保持しているものではない。またプログラムカウンタが持つのはサイズ (大きさ) ではなくアドレス (位置) であり、指しているものの種類が異なる。

  • 不正解ウ

    プログラムを構成する命令数を保持するレジスタは CPU には存在しない。プログラムカウンタは名前に「カウンタ」と付くため命令の個数を数えていると誤解されやすいが、実際に数え上げているのは実行した命令の本数ではなく、次に読み出すべき番地の位置である。値はアドレスとして更新され、分岐が起これば前の番地に戻ることもあるので、命令数を表す数値にはならない。

  • 不正解エ

    命令実行に必要なデータ (オペランド) が入っている主記憶のアドレスを保持するのは、アドレスレジスタや指標レジスタ (インデックスレジスタ)、基底レジスタといったアドレス計算に関わるレジスタの役割である。命令語のアドレス部から求めた実効アドレスによってデータを読み書きする。プログラムカウンタが指すのはデータではなく命令そのものが置かれた番地であり、対象が「データ」か「命令」かという点でこの選択肢は誤りである。混同しやすい定番の引っかけなので区別しておきたい。

ここがポイント
  • プログラムカウンタ (命令アドレスレジスタ) は、次に実行する命令が格納された主記憶のアドレスを保持するレジスタ。命令を取り出すたびに次の命令を指すよう自動更新され、分岐命令では分岐先アドレスが設定される。保持するのは命令の個数でも領域サイズでもなくアドレスである点が要点。
  • CPU 内の主なレジスタの役割分担 — プログラムカウンタ (次の命令のアドレス)、命令レジスタ (取り出した命令そのもの)、アドレスレジスタや指標レジスタ (データの主記憶アドレス・実効アドレス計算)、アキュムレータや汎用レジスタ (演算対象と演算結果のデータ)。「命令のアドレス」と「データのアドレス」を取り違えないことが得点の分かれ目。
用語

解答の記録