平成7年度 春期 第二種 午後 問10

                        [更新日]1995.05.22
問10 次のアセンブラプログラムの説明及びプログラムを読んで、設問 に答えよ。 [プログラムの説明] 長さ1以上4以下の数字の列を受け取り、その数値を2進数に変換する 副プログラムCONVRTである。 (1) 数字の列は、連続するn語の領域に入れられ、その先頭アドレスが GR1に格納されて主プログラムから渡される。 各数字は各語の下位8ビットに格納され、上位8ビットにはすべて0 が入っている。 (2) 数字の列の直後の語(n+1語目)は、すべてのビットに0が入ってい る。 (3) 数字の列を10進数とみなし、それを2進数に変換してGR0に格納し、 主プログラムに返す。 例えば、数字の列”1234”が与えられた場合の変換は図のようにな る。 図では、領域の内容及びGR0の内容は16進数で表示してある。 GR1 ↓ CONVRT実行後 ┌────┬────┬────┬────┬────┐       ┌───┐ │0031│0032│0033│0034│0000│─→R0の内容│4D2│ └────┴────┴────┴────┴────┘       └───┘ 図 変換の例 (4) 次の場合、GR0に-1を格納して、主プログラムに返す。 1, 数字以外の文字が現れた。 2, 数字の列の長さが0であった。 3, 数字の列の長さが4を越えた。 (5) この副プログラムから戻るとき、汎用レジスタGR1〜GR3を、呼び出 される前の内容に復元する。 設問 プログラム中の[ ]に入れる正しい答えを、解答群の中から選べ。 解答群 ア CPA GR2,ZERO イ JMI ERROR ウ JNZ ERROR エ JPZ FIN オ JPZ ERROR カ JZE ERROR キ LEA GR2,0,GR2 ク SLL GR0,2 ケ SLL GR0,3 コ SRL GR0,2 [プログラム]  CONVRT START           ;   PUSH  0,GR1           ;レジスタの退避   PUSH  0,GR2           ;レジスタの退避   PUSH  0,GR3           ;レジスタの退避   LD    GR2,0,GR1        ;   LEA   GR2,0,GR2         ;文字列の長さ0?   JZE   ERROR          ;   LEA   GR3,4           ;文字列長チェック用カウンタ   LEA   GR0,0           ;  LOOP   CPL   GR2,ZERO    ;≧ '0'? [     a     ]        ;   CPL   GR2,OVER         ;≦ '9'? [     b     ]        ;   AND   GR2,MASK        ;   SLL   GR0,1           ;処理済みの数値X10   ST    GR0,WORK        ;処理済みの数値X10 [     c     ]        ;処理済みの数値X10   ADD   GR0,WORK        ;処理済みの数値X10   ST    GR2,WORK        ;現在の数値を加算   ADD   GR0,WORK        ;現在の数値を加算   LEA   GR1,1,GR1         ;   LD    GR2,0,GR1        ; [       d       ]    ;文字列の終り?   JZE   FIN            ;   LEA   GR3,-1,GR3        ;   JNZ   LOOP           ;  ERROR  LEA   GR0,-1      ;   FIN    POP   GR3      ;レジスタの復元   POP   GR2            ;レジスタの復元   POP   GR1            ;レジスタの復元   RET                 ;  ZERO   DC    #0030       ;   '0'  OVER   DC    #003A      ;   '9'+1  MASK   DC    #000F  WORK   DS    1     END
戻る 次頁:問11