基本情報技術者試験の問12:アセンブラの解説を考えてみた 前編

強制ブログ第28回目です。

今回はあまり需要がないと思われるが、29年秋基本情報技術者試験アセンブラの解説を考えてみました。

f:id:gomibakosan45:20171017210232p:plain

 

まずプログラム1の説明をみてみると、a配列(32ビット)の中からb配列と一致する部分を検索するようです。pには最初に一致した部分の先頭ビットを入れて、一致する部分がない場合はGR0に-1を設定するとのことです。問題を解く時に具体的な配列の中身を自分で作っておくとイメージしやすいと思うので、以下のような感じでやってみます。

※...はビットの間を省略しています。

a:01100...0

b:1100

 13行目の直前に入る各レジスタの中身

GR0:-1

GR1:28   

GR2:1100 

GR3:28

GR4:01100...0

GR5:1100...0

GR6:F000

GR7:01100...0

a:15行目はJZEなので、0になって数字が一致したらFOUNDに行くことを考えていくことになります。

13行目でAND命令を行いGR7が01100..0に整えます。一旦空白を飛ばし一致しないことが確定しているので19行目を通ってJUMPします。次のANDの時のGR7は1100..0となります。「ア」のANDは一致したら0にならないので違います。「イ」のORは0になることは無いので違います。「ウ、エ」は一致するかどうか検証できないので選択肢から消せます。「オ」のXORは一致したら0にすることができるので正解です。

 

b:プログラムを見てみるとNEXTに飛ぶ命令がないことが分かるので「ア、ウ、オ」ではないことが推測できます。さらに、JMI命令の「イ」はマイナスになることは無いので選択肢から消すことができます。同様にJPLも0000のとき以外はORで0001されるのはおかしいので「カ」も消すことができます。残った「エ」はオーバーフローした時のみORで0001されるので正解です。

 

c:4~6行目を二命令に置き換えるという問題です。

GR3に4が入っている状態で8000をF000の状態にすればいいとのことです。

ア:SLL GR6,-1,GR3は

1000 0000 0000 0000→0000 0000 0000 0000となり0000なので違います。

イ:SLL GR6,0,GR3は

1000 0000 0000 0000→0000 0000 0000 0000となり0000なので違います。

ウ:SRA GR6,-1,GR3は

1000 0000 0000 0000→1111 0000 0000 0000となりF000なので正しいです。

エ:SRA GR6,0,GR3は

1000 0000 0000 0000→1111 1000 0000 0000となりF800なので違います。

オ:SRL GR6,-1,GR3は

1000 0000 0000 0000→0001 0000 0000 0000となり1000なので違います。

カ:SRL GR6,0,GR3は

1000 0000 0000 0000→0000 1000 0000 0000となり0800なので違います。

 

なんだが分かりにくい解説になってしまったと思うのですが許してください。

誤りがございましたらコメントに間違いを指摘していただけますと幸いです。

ここまで見ていただきありがとうございます。後編は近日書き込みたいと思います。