Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

平成29年度春季基本情報午後問12

平成29年度春季 基本情報技術者試験(FE)の午後問題12(アセンブラ,CASL)は、64ビット符号なし整数の加算(副プログラムADD64)と副プログラムADD64を使用して、32ビット符号なし整数の乗算を行う副プログラムMUL32に関する問題でした。

設問1

空欄a

桁上がりのための処理を選択することになります。

空欄b

最下位の16ビット同士、第3位16ビット同士、第2位16ビット同士、最上位16ビット同士と加算処理が進んでいきますが、17行目の実行結果、ゼロフラグが1になれば、18行目でEXITにジャンプすることを考えると、最上位16ビットまで処理が進んだかを判定する処理を選ぶことになります。

設問2

行番号7の命令が2回目に実行されるときは、行番号11で(GR1)+3番地と(GR2)+3番地の加算をした結果#A684+#B759=#15DDDとなり、14行目でGR5が1となり、16行目でGR0が1になった状態で、7行目の処理が実行されることになります。#1+#2E0Cの結果を選択することになります。

設問3

2進数の掛け算では、以下のようになり、(A)の左シフトと加算で計算することができます。プログラム2の中で出てくるTEMPは、(A)をシフトした数を格納する役割を持っています。

    1011 (A)
   x1010 (B)
  ------
   10110 TEMP
 1011000 TEMP
 -------
 1101110

MUL32の中心的な処理は以下の所だと思います。TESTBITでは、かける数(GR0)の一番右側のビットが0の場合は、EXITLOOPへ、1の場合は、TEMPとGR3(乗算結果)を加算します。EXITLOOPでは、32ビット分の処理が終わっていればEXITへ、そうでなければTEMPを左に1ビットシフトする処理(ここでは2倍する処理で実現)が行われることになります。

TESTBIT  AND  GR0,=#0001
         JZE  EXITLOOP
         LD   GR1,GR3
         LAD  GR2,TEMP
         CALL ADD64
EXITLOOP CPL  GR5,=31
         JZE  EXIT
         ADDL GR5,=1
         LAD  GR1,TEMP
         空欄f
         CALL ADD64 
         LD   GR2,GR4    ; GR4に退避した値をGR2に復帰
         JUMP LOOP
EXIT     RPOP
         RET