プログラム全体をトレースすることなく、短時間で解ける問題について、その解答方法を紹介します。
a~fの6問のうちa,c,e,fの4問が、プログラム全体をトレースすることなく、解くことができます。
設問1 - a
[穴埋め箇所]
[選択肢]
[解き方]
1. 解答群からの推定
解答群の命令は、いずれも“GR2”を更新しています。
⇒“GR2”が何なのか?
2. 更新前の“GR2”は?
“GR3”には「ビット位置」が格納されます。
(「3行目」のコメントより)
(「3行目」のコメントより)
⇒“GR2”にも「ビット位置」が格納されます。
(「6行目」の「LD GR2,GR3」により)
(「6行目」の「LD GR2,GR3」により)
3. 更新後の“GR2”は?
“GR2”には「相対アドレス」が格納されます。
(「4行目」のコメント(「ビット位置を、相対アドレス(GR2)に変換」)より)
(「4行目」のコメント(「ビット位置を、相対アドレス(GR2)に変換」)より)
4. 「相対アドレス」とは?
〔プログラムの説明〕の図1で示されるように、相対アドレスは16ビット毎に加算される値です。
5. 正答は?
穴埋め箇所は、「ビット位置」から「相対アドレス」に変換する処理となります。「相対アドレス」は「ビット位置」を16で割ることで得られます。
「ビット位置」を16で割る命令は「SRL
GR2,4」です。
⇒「オ」が正解となります。
[別の絞り込み方法]
1. 命令の妥当性から推定
l 「3行目」のコメントより、“GR3”には「ビット位置」が格納されます。
l 「ビット位置」の取り得る値は、0~無限であり、選択肢の「ア」「ウ」「エ」「カ」の命令におけるシフト量としては不適当です。
以上より、選択肢の「ア」「ウ」「エ」「カ」の可能性は低くなります。2. アセンブラのお決まりの処理パターンから推定
上位の情報と下位の情報を抽出するにあたって、お決まりの処理を行うことが多々あります。
上位16bitと下位4bitを抽出する場合、以下のように処理します。
l 上位の情報抽出方法:4bit右にシフト
l 下位の情報抽出方法:#000FでAND
このことから、選択肢を絞り込むことは難しいですが、知識の片隅にあると便利です。
設問1 - c
[穴埋め箇所]
[選択肢]
[解き方]
1. 解答群からの推定
分岐条件と分岐先が問われています。
分岐条件と分岐先を整理します。
⇒分岐条件は「JNZ」、「JPL」、「JZE」からの三択
分岐先は"FIN"、" LOOP"からの二択
2. 分岐条件の整理
「27行目」の「LD GR4,GR4」で分岐条件を判定しています。
“GR4”が正の時に分岐する命令は、「JNZ」と「JPL」
“GR4”が0の時に分岐する命令は、「JZE」
“GR4”が負の時に分岐する命令は、「JNZ」
です。
正の時に分岐すると仮定すると、正解が二個になってしまうので正しくありません。「JPL」は除外されます。
「JZE」か「JNZ」か?
「行番号32」で“GR4”を参照しているので、“GR4”が0の時分岐(「JZE」)することとなります。
分岐条件と分岐先が問われています。
分岐条件と分岐先を整理します。
⇒分岐条件は「JNZ」、「JPL」、「JZE」からの三択
分岐先は"FIN"、" LOOP"からの二択
2. 分岐条件の整理
「27行目」の「LD GR4,GR4」で分岐条件を判定しています。
“GR4”が正の時に分岐する命令は、「JNZ」と「JPL」
“GR4”が0の時に分岐する命令は、「JZE」
“GR4”が負の時に分岐する命令は、「JNZ」
です。
正の時に分岐すると仮定すると、正解が二個になってしまうので正しくありません。「JPL」は除外されます。
「JZE」か「JNZ」か?
「行番号32」で“GR4”を参照しているので、“GR4”が0の時分岐(「JZE」)することとなります。
3. 分岐先の絞り込み
分岐先を絞り込むにあたっては、分岐元のないラベルを捜します。
ラベル"FIN"に分岐する命令が存在していません。
⇒ラベル"FIN"に分岐する命令の可能性が高くなります。
分岐命令は、「JZE」で「ビット長」が0の時に分岐するので、"FIN"への分岐が正解となります。
4. 正答は?
「オ JZE FIN」が正解となります。
設問2 – e,f
[再編成前のモジュール構成]
[再編成後のモジュール構成]
[選択肢 e]
[解き方]
1. 設問の意図を汲み取る
「プログラム1」のモジュール名が、BITSONからBITSOPに変更されるので、「イBITSOP」が正解となります。
[選択肢 f]
1. 設問の意図を汲み取る
「プログラム3」は、“GR7”に“SETOP”のアドレスを設定して「プログラム1」を呼び出すので、「CALL 0,GR7」で目的の“SETOP”を実行できる。
「オ 0,GR7」が正解となります。