スゴ技

【解説】平成29年度 秋 基本情報技術者試験 【問12】

Blog:IT・情報処理BLOG |

【解説】平成29年度 秋 基本情報技術者試験 【問12】

IT分野の担当教員の山口あかねです。

帰ってきたブログのおねーさまです。先日行われた情報処理試験のCASLの解説を書きたいと思います。

IT分野では、私たちの生活の身近なところで日々使われているコンピュータシステムやWebアプリケーションを設計し、開発する勉強を日々行っています。
卒業生はシステムエンジニアやWebエンジニアなどとして就職をしています。もちろん国家資格の取得にも力を入れているので、資格を取りたい人には最適な分野です。


過去の基本情報技術者試験の解説はこちら


平成29年度秋期午後問12の解説

平成29年秋基本情報午後問12の解説です。過去に出題されたビット処理の問題の改題です。

解法のポイントは、ビット処理に必要なマスクデータ作成の基本がわかっていること!です。

各レジスタに何が入っているのかをしっかりトレースしていくことができれば解くことができる問題です。

とにかくレジスタに入っているものをしっかり書いていきましょう。

過去問題でもよくあるように設問2や3あたりで例のデータが与えられているのでそれを使って考えます。

設問1の空欄補充を考えつつあとの設問の問題も考えられる一石二鳥方式です。

32ビットのビット列の中から指定されたビットパターンを検索する、という問題です。

問題文には下記のような図で説明されていますが

CA2901

検索するビット列は1ビッド以上16ビット以下のため、実際のメモリ上では下記のような状態になっています。

CA2902

設問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であればただシフトをするだけでかまいません。

CA2903CA2904

2語目の先頭ビットが1の場合は、1語目の最終ビットに1をORしてやる必要があります。2語目を1ビット左シフトをして1がシフトアウトされた場合には1語目の右端のビットに1をORしなければなりません。

CA2905CA2906

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の解答も考えられます。

メモリのデータの状態下記のようになります。

CA2907

各レジスタは次のように変化していきます。

CA2911

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にジャンプする。

 

CA2908 パターン1

検索で見つかったビット列が

2語にまたがっている時

CA2909 パターン2

検索で見つかったビット列が

上の1語の中だけにある時

CA2910 パターン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の内容は下記のようになっている。

CA2912

それを  SLL  GR6,0,GR3を実行すると(左へ2ビットシフト)下記のようになる。

CA2913

そのため解答は  オ  の  #E000  となる。

2017年(平成29年度)秋期の解説

Date:

神戸電子の
IT・情報処理学科
についてもっと知りたい!

Webアプリケーション等のシステム管理、設計、開発が行える総合的なITエンジニアを育成する学科です。

学科紹介を見る (神戸電子サイト)

学科紹介イメージ
Info神戸電子からのお知らせ

Tagタグ

Teamライターチーム紹介

神戸電子オフィシャルSNS

オープンキャンパスなどの
誰でも参加OKの楽しいイベント
やブログの最新記事などお届けします!

ページの上へ移動