基本情報技術者試験の問12:アセンブラの解説考えてみた 後編
強制ブログ第31回目です。
今回は前回の基本情報技術者試験の問12の解説考えてみた後編です。
設問3の問題はa配列とb配列が一致した部分の場所をγ配列の中身で置き変える問題です。この問題をやるに当たって、先にテストデータがある設問4からやった方がプログラムの中身がわかりやすいのでこちらからやっていこうと思います。
a:1111 1111 1111 0011 赤:第一語目
0111 1111 1111 1111 青:第二語目
(2つ合わせて32ビット)
β:11011
n:5
γ:11110
この問題はラベルNEXTを通ります。NEXTは一語目と二語目をまたがってβが一致した場合に処理を行うところです。今回の場合は、0011 0111と緑の場所が一致しているところですね。
さて、プログラム2を解くのに大事なポイントはGR0に何が入っているか理解するところだと思います。GR0はプログラム1でビット位置pの実行結果が格納されています。テストデータでは「1111 1111 1111 0011 0111 1111 1111 1111」 でβと一致している先頭ビットは14(0から数えるため)なのでGR0=14ということがわかります。
設問4:このままトレースしていくとGR6はF800となります。GR3もSUBA GR3,GR2から変化がないので2となります。23行目でSLL,0,GR3をやると
1111 1000 0000 0000→1110 0000 0000 0000となりE000になります。よって答えはオになります。dを無視してやっても上記の値には変化がありません。
d:先のほどのテストデータの時に二回通ったS2のところを見てみましょう。一回目の39行目のAND命令に入ったGR2の値「FFF0」GR4は「00011」二回目のときは「1FFF」でGR4「11000」です。
「1111 1111 1111 0000 0001 1111 1111 1111」βと一致していた場所が0に変換しているのがわかります。後はこの緑の所にγの「11110」を入れて上げたら完成です。
ア:AND GR2,GR4 一回目→「FFF0」二回目→「0FFF」
「1111 1111 1111 0000 0000 1111 1111 1111」のままなので違います。
イ:OR GR2,GR4 一回目→「FFF3」 二回目→「DFFF」
「1111 1111 1111 0011 1110 1111 1111 1111」となりγと一致したので正解です。
ウ、エ:そもそも一致しないので除外。
オ:XOR GR2=#FFFF 一回目→「000F」 二回目→「D000」
「0000 0000 0000 1111 1110 0000 0000 0000」となりγは一致するが他が変わってしまったので違います。
C:ONL2は二語目にβと一致するものがあるかどうか検査するためにあります。二語目の所でpを見つけたいことになるので、イのGR2=0が正しいことになります。またLAD GR1,1,GR1は二語目GR1を一語目から二語目にするという意味となります。
またもや分かりにくい気がしますが申し訳ございません。誤りがございましたらコメントしていただければ幸いです。ここまで読んでいただきありがとうございました。