設問1のa
“穴埋め箇所”付近のコメントに着目
コメント(行番号4~5)には、以下のように記載されています。
「ビット位置(GR3)」を「相対アドレス(GR2)」に変換
|
3
4
5
6
7
8
|
LD GR3,1,GR1 ; GR3:ビット位置
; ビット位置を,相対アドレス(GR2)と
; ビットインデックス(GR3)とに変換
LD GR2,GR3
[ a ]
AND GR3,=#O00F
|
“相対アドレス”とは
“相対アドレス”の説明は、〔プログラムの説明〕に記載されています。
“相対アドレス”は、「ビット位置」を16で割ることで得られることが分ります。
該当する選択肢は?
「ビット位置」を16で割る処理に該当する“選択肢”は、「オ SRL GR2,4」になります。
ア
|
SLL
GR2,O,GR3
|
イ
|
SLL
GR2,4
|
ウ
|
SLL
GR2,4,GR3
|
エ
|
SRL
GR2,O,GR3
|
オ
|
SRL
GR2,4
|
カ
|
SRL
GR2,4,GR3
|
講評
本問は、穴埋め箇所周辺のプログラム解析だけで正解を得ることができます。
設問1のb
アセンブラのノウハウ
「LD
GR3,GR3」
GR3をGR3に転送してどんな意味があるのか?
GR3をGR3に転送することで、GR3に設定されている値に応じてフラグレジスタが変化します。
「SUBL GR3,GR3」
GR3に0を設定する処理になります。
穴埋め箇所周辺のトレースで正解を得られるか?
穴埋め箇所周辺のトレースで正解を得られるかを確認してみます。
GR3の用法を把握する必要があり、正解が得られなさそうです。
16
17
18
19
|
LD GR3,GR3 ; GR3の設定値は?
JZE FULL
; GR3が0ならFULLに分岐
[ b ]
SUBL GR3,GR3 ; GR3に0を設定
|
選択肢から正解を得られるか?
選択肢の内容から正解を得られる(または絞り込める)かを確認してみます。
GR5を更新していますが、GR5の用法を把握する必要があり、正解が得られなさそうです。
ア
|
ADDL
GR5,GR2
|
イ
|
ADDL
GR5,GR3
|
ウ
|
ADDL
GR5,GR4
|
エ
|
SUBL
GR5,GR2
|
オ
|
SUBL
GR5,GR3
|
カ
|
SUBL
GR5,GR4
|
一旦、保留
プログラム全体のトレースを要するので、本問題の解析を保留します。
設問1のc
選択肢から正解を得られるか?
分岐先・分岐条件を問う問題では、選択肢に記載された分岐先と分岐条件を整理します。
ア
|
JNZ FIN
|
イ
|
JNZ LOOP
|
ウ
|
JPL FIN
|
エ
|
JPL LOOP
|
オ
|
JZE FIN
|
カ
|
JZE LOOP
|
分岐先は?
分岐先が問われた場合、プログラムの中で分岐元のないラベルがないかを捜します。
本問の場合、「FIN」へ分岐する分岐命令がなく、FINに分岐する選択肢が正解である可能性が高くなります。
分岐条件は?
プログラムを確認すると、GR4の設定値に従って分岐することが分ります。
27
28
|
BREAK LD GR4,GR4 ;操作の対象になる未処理のビットあり?
[
c ]
|
GR4って何?
GR4を更新する箇所を抽出してみます。
GR4にはビット長が格納されていることが分ります。
ビット長は、初期値が正(非ゼロ)で、減算されていく変数ですので、JNZとJPLでは同じ結果が得られてしまい選択肢として不適切です。JZEが正解となります。
9
20
27
28
|
LD
GR4,2,GR1 ;GR4:ビット長(初期値)
FULL SUBL GR4,GR5 ;操作するビット数だけビット長を減らす
BREAK LD GR4,GR4
;操作の対象になる未処理のビットあり?
[
c ]
|
分岐先は?
ビット長が0になった時の分岐先としては、FINが妥当です。
以上より、正解は「オ JZE FIN」となります。
講評
本問は、分岐判断に使用される汎用レジスタの用途を解析だけで正解を得ることができます。
0 件のコメント:
コメントを投稿