IT分野の担当教員の山口あかねです。
帰ってきたブログのおねーさまです。先日行われた情報処理試験のCASLの解説を書きたいと思います。
IT分野では、私たちの生活の身近なところで日々使われているコンピュータシステムやWebアプリケーションを設計し、開発する勉強を日々行っています。
卒業生はシステムエンジニアやWebエンジニアなどとして就職をしています。もちろん国家資格の取得にも力を入れているので、資格を取りたい人には最適な分野です。
平成29年度秋期午後問12の解説
平成29年秋基本情報午後問12の解説です。過去に出題されたビット処理の問題の改題です。
解法のポイントは、ビット処理に必要なマスクデータ作成の基本がわかっていること!です。
各レジスタに何が入っているのかをしっかりトレースしていくことができれば解くことができる問題です。
とにかくレジスタに入っているものをしっかり書いていきましょう。
過去問題でもよくあるように設問2や3あたりで例のデータが与えられているのでそれを使って考えます。
設問1の空欄補充を考えつつあとの設問の問題も考えられる一石二鳥方式です。
32ビットのビット列の中から指定されたビットパターンを検索する、という問題です。
問題文には下記のような図で説明されていますが
検索するビット列は1ビッド以上16ビット以下のため、実際のメモリ上では下記のような状態になっています。
設問1の空欄補充問題の考え方です。
検索方法は、1語目(A+0番地の記憶内容)の左端(黄色の部分)に照合するビット列を持ってきて検索ビット列と一致しているかどうかを判定していきます。
判定方法は照合する位置にあるビットを取り出し、(GR2)番地に入っている検索用ビットとXORをします。同じであれば消去されてすべて0になりますが。違うビットがまざっていれば0以外の数値になります。これが12行目~15行目で行われています。
12 LP LD GR7,GR4
;A+0番地の記憶内容をGR7へ
13 AND GR7,GR6
;A+0番地から照合するビットを取り出す
14 ( a )
;照合
15 JZE FOUND
;オール0になっていれば一致
照合するためにはXORをするので空欄a は オ の XOR GR7,GR2 です。
ビット照合にはXORという知識があれば、解答群にXORは一つですので、すぐに解答が選べます。
見つからない場合は、検索するビットが順番に1語目の左端の位置に来るように1ビットずつ左シフトをして次の候補と照合をして行きます。その時に注意するべき点は、「1語目の最終ビットは2語目の先頭ビットがやってくる」、ということです。
2語目の先頭ビットが0であればただシフトをするだけでかまいません。
2語目の先頭ビットが1の場合は、1語目の最終ビットに1をORしてやる必要があります。2語目を1ビット左シフトをして1がシフトアウトされた場合には1語目の右端のビットに1をORしなければなりません。
18 SLL GR4,1
;A+0番地の記憶内容を1ビット左へ
19 SLL GR5,1
;A+1番地の記憶内容を1ビット左へ
20 ( b )
;オーバーフローが起きればNEXTへ
21 JUMP LP
;オーバーフローが起きなければLPへ戻る
18行目~21行目でこの判断をしますので、bの空欄は、エ の JOV NEXT となります。
設問2はマスクデータ作成方法についてです。
マスクデータの作成方法は、よく知られているものに2つの方法があります。
- その1
#FFFFのデータをシフトして作成をする方法
- その2
#8000のデータをSRAで右シフトをして作成をする方法
今回のプログラム1ではその1の方法が使われているので、それをその2の方法に書き換えようという問題です。ここまでわかっていれば、解答群からGR6をSRAしているものを選べばよいのですが、ウとエのどちらかになります。ウとエの違いはシフトビット数です。
ウ SRA GR6,-1,GR3
エ SRA GR6,0,GR3
#8000のデータをコピーをして1のビット数を増やす、という考え方なので、もともと1が一つあるので、コピーをする数は最終的に必要なビット数から1を引かなければなりません。ですので、ウが正解となります。
設問3
プログラム2を設問4のデータ例でトレースをして考えます。同時に設問4の解答も考えられます。
メモリのデータの状態下記のようになります。
各レジスタは次のように変化していきます。
3行目で設問1で完成をさせた BSRHを呼び出した後、GR0には14が設定されて戻ってくる。
11行目のSUBA GR3,GR2 で 16-Pが計算される。その計算結果が0または負の数値になれば、検索で見つかったビット列は2語目にだけ存在していることになる。パターン3であったということになる。この場合、ONL2にジャンプする。
また、14行目の CPA GR3,GR7 で16-Pとnの比較が行われているが、16-Pがnより小さい場合は検索で見つかったビット列は2語にまたがるパターン1であったということになる。この場合は、NEXTにジャンプする。
nより大きい場合は、1語目にだけ存在していることになる。パターン2であったということになる。この場合、ONL1にジャンプする。
パターン1
検索で見つかったビット列が 2語にまたがっている時 |
|
パターン2
検索で見つかったビット列が 上の1語の中だけにある時 |
|
パターン3
検索で見つかったビット列が 下の1語の中だけにある時 |
トレースをして各レジスタの変化状況を表で表すと上記のようになる。
空欄dは40行目で、置き換えデータ作成完了となるところが空欄になっているので、A+0番地の置き換え場所が
0クリアされたデータと置き換えデータをORする命令が入る必要がある。答えは、イ の OR GR2,GR4となる。
空欄cは2語目だけで置き換えが完了する時の処理になる。2語目だけで置き換えが起こると判明するのは、11行目のGR3からGR2を引き算をした結果からとなる。2語目だけで置き換えとなるのは、引き算の結果が負の場合になる。そのため2語目の置き換えられるビット数を求めるためにはGR3の値を絶対値にしなければならない。
絶対値を求める方法は、下記の2通りがある。
★その1 ビットを反転して1加算する
XOR GR3,=#FFFF
ADDA GR3,=1
★その2 0にしたところから負の数を減算する
LD GR2,=0
SUBA GR2,GR3
今回は空欄の次の命令からその2の方法と考えられるので、空欄cには、 イ LD GR2,=0 が入る。
設問4
設問3でトレースとした結果、23行目の命令実行後には、マスクデータを入れ替えビット列の場所まで移動をした値が入っていることになる。
具体的には、下記の通り。23行目の命令を実行する前にはGR6の内容は下記のようになっている。
それを SLL GR6,0,GR3を実行すると(左へ2ビットシフト)下記のようになる。
そのため解答は オ の #E000 となる。
2017年(平成29年度)秋期の解説
- Date:
- Tag:
- この記事を
友だちに教える - LINE
- - HatenaBookmark
- GooglePlus