平成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を、呼び出 される前の内容に復元する。 設問 プログラム中の[ ]に入れる正しい答えを、解答群の中から選べ。
a 答
イ
b 答
オ
c 答
ク
d 答
キ
解答群 ア 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