[更新日]1998.11.06
問10 次のアセンブラプログラムの説明及びプログラムを読んで、設問に答えよ。
〔プログラムの説明〕
副プログラム SCORE は,与えられた正解に基づいて受験者の解答を減点法で採点し,その点数を出力する。
(1) 問題は 16 問からなり,すべての問いがそれぞれ 0 か 1 かを選択して答える形式である。
(2) 図 1 に示す形式のパラメタの先頭アドレスが GR1 に格納されて,主プログラムから渡される。
(GR1)+0
受験者の解答
+1
正解
+2
配点表のアドレス
図1 パラメタの形式
(3) 受験者の解答は,ビット 0(左端ビット)が問 1,ビット 1 が問 2,…,ビット15 が問 16 に対応している。
(4) 正解の各ビットも (3) と同様に各問に対応している。
(5) 各問に対する配点は,図 2 に示すように 16 語からなる配点表(MARKS)に格納されている。16 問の配点の合計は 100 点とする。
MARKS+0
問 1 の配点
問 2 の配点
問 3 の配点
+15
問 16 の配点
図2 配点表
(6) 結果は,3 けたのゼロ抑制した 10 進数として出力する。
(7) 主プログラムに戻るとき,汎用レジスタ GR1 〜 GR3 の内容を元に戻す。
〔プログラム〕
SCORE START ; PUSH 0,GR1 ; PUSH 0,GR2 ; レジスタの退避 PUSH 0,GR3 ; LEA GR0,32 ; ST GR0,BUFFR0 ; 出力バッファを空白にする ST GR0,BUFFR1 ; LEA GR0,100 ; 満点(100点)を設定 LD GR3,2,GR1 ; 配点表のアドレス LD GR2,0,GR1 ; 解答 EOR GR2,1,GR1 ; 正解と比較 MARK JZE PRINT ; すべて正答又は採点終了 ; SUB GR0,0,GR3 ; 誤答の場合,減点 CORECT LEA GR3,1,GR3 ; SLL GR2,1 ; JMP MARK ; ; ; 10進数に変換して出力する PRINT LEA GR3,BUFFR2 ; CONV LEA GR2,0 ; DIV10 CPA GR0,TEN ; ; GR0÷10 SUB GR0,TEN ; 商→GR2 LEA GR2,1,GR2 ; 余り→GR0 JMP DIV10 ; BUFSET ; 余りを文字コードに変換し ST GR0,0,GR3 ; 出力バッファに設定 LEA GR3,-1,GR3 ; ; JNZ CONV ; OUT BUFFR0,BLEN ; POP GR3 ; POP GR2 ; レジスタの復元 POP GR1 ; RET ; TEN DC 10 ; CHAR0 DC #0030 ; BLEN DC 3 ; BUFFR0 DS 1 ; BUFFR1 DS 1 ; BUFFR2 DS 1 ; END ;
設問 プログラム中の に入れる正しい答えを,解答群の中から選べ。
a,b に関する解答群
ア JMI BUFSET イ JMI CONV ウ JMI CORECT
エ JNZ BUFSET オ JNZ CORECT カ JPZ BUFSET
キ JPZ CORECT ク JZE CONV
c,d に関する解答群
ア ADD GR0,CHAR0 イ AND GR0,CHAR0 ウ LD GR0,0,GR2
エ LD GR0,0,GR3 オ LD GR0,CHAR0 カ LEA GR0,0,GR2
キ LEA GR0,0,GR3 ク SUB GR0,CHAR0