エンベデッドシステムスペシャリスト 2021年 午前2 問02
問題文
命令アドレスレジスタ(プログラムカウンタ)に関する記述として、適切なものはどれか。
選択肢
ア:条件分岐命令を実行すると、命令アドレスレジスタの内容が書き換えられることがある。(正解)
イ:転送命令では、転送元アドレス、転送先アドレス及び転送バイト数を全て命令アドレスレジスタにセットしてから転送を実行する。
ウ:分岐命令の実行前に、命令アドレスレジスタの内容が命令バッファに保存され、実行後に復帰される。
エ:命令アドレスレジスタで示された番地の主記憶には、実行すべき命令のアドレスが格納されている。
🔒 解説は解答すると表示されます
プログラムカウンタの役割【午前2解説】
正解の理由
命令アドレスレジスタ(プログラムカウンタ)は、次に実行する命令のアドレスを保持するレジスタです。
通常は命令を読み出すたびに次の命令のアドレスへ更新されます。条件分岐が成立した場合は、分岐先の命令アドレスに書き換えられることがあります。そのため、適切なのはアです。
解法ステップ
- プログラムカウンタが保持するものを確認します。
→ 次に実行する命令のアドレスです。 - 命令の実行によって、その値が変わる場合を考えます。
→ 通常の命令では次の命令へ進み、分岐命令では分岐先へ移ります。 - 選択肢の内容と照らし合わせます。
→ 条件分岐命令の実行時に、プログラムカウンタが書き換えられることがあるため、アが適切です。
選択肢別の誤答解説
-
ア:適切です。
条件分岐が成立すると、プログラムカウンタには分岐先の命令アドレスが設定されます。条件が成立しない場合は、通常どおり次の命令へ進みます。 -
イ:誤りです。
転送元アドレス、転送先アドレス、転送バイト数などは、命令の形式やCPUの構成に応じて、汎用レジスタや専用レジスタなどに保持されます。プログラムカウンタは次に実行する命令のアドレスを保持するものであり、転送情報をまとめてセットするレジスタではありません。 -
ウ:誤りです。
分岐命令の実行時に、プログラムカウンタの値を命令バッファに保存して実行後に復帰する、という説明は適切ではありません。サブルーチン呼出しなどで戻り先を保存する場合は、スタックなどが使われます。 -
エ:誤りです。
プログラムカウンタが示す番地の主記憶には、通常、実行すべき命令そのものが格納されています。その命令のアドレスが格納されているわけではありません。
よくある誤解
-
プログラムカウンタは、現在実行中の命令のアドレスだけを保持する
厳密には、次に実行する命令のアドレスを保持するレジスタです。命令の読出しや実行のタイミングによっては、「現在の命令」と説明されることもありますが、試験では「次に実行する命令のアドレス」と押さえると確実です。 -
分岐命令を実行すると、必ずプログラムカウンタが分岐先に変わる
条件分岐では、条件が成立した場合に分岐先へ更新されます。条件が成立しなければ、通常の順次実行となります。 -
プログラムカウンタが指す番地には、命令のアドレスが格納されている
その番地には命令が格納されています。プログラムカウンタが保持する「命令のアドレス」と、主記憶に格納されている「命令」を混同しないようにしましょう。
補足コラム
命令の実行は、概念的には「命令を読み出す」「命令を解読する」「命令を実行する」という流れで進みます。プログラムカウンタは、命令の読出し先を指定する役割を担います。
通常は命令が順番に実行されるため、プログラムカウンタは次の命令の位置へ進みます。一方、条件分岐やジャンプ命令では、実行順序が変わるため、分岐先のアドレスが設定されます。
FAQ
Q. プログラムカウンタは、命令を実行するたびに必ず増加しますか?
A. 通常の順次実行では次の命令のアドレスへ進みます。ただし、分岐命令などでは分岐先のアドレスに変更されるため、必ず単純に増加するとは限りません。
A. 通常の順次実行では次の命令のアドレスへ進みます。ただし、分岐命令などでは分岐先のアドレスに変更されるため、必ず単純に増加するとは限りません。
Q. プログラムカウンタと命令レジスタは何が違いますか?
A. プログラムカウンタは次に実行する命令のアドレスを保持します。命令レジスタは、読み出した命令そのものを保持します。
A. プログラムカウンタは次に実行する命令のアドレスを保持します。命令レジスタは、読み出した命令そのものを保持します。
関連キーワード: プログラムカウンタ、命令アドレスレジスタ、条件分岐、命令レジスタ、スタック

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

