問14 次のアセンブラプログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。
〔プログラムの説明〕
副プログラム ADDP は,主プログラムから,BCD コードで表現された二つの整数 a,b(a ≧ 0,b ≧ 0)を受け取り,a と b の和を BCD コードとして求める。
(1) BCD コードとは,10 進数の値に対して,その 10 進数の各けたを 4 ビットの 2 進数で表現したものである。例えば,10 進数の 5973 を BCD コードで表現すると, 次のとおりになる。
千の位
百の位
十の位
一の位
5
9
7
3
↓
0101
1001
0111
0011
(2) a と b は共に 4 けた(16 ビット)であり,それぞれ GR1 と GR2 に格納されて,主プログラムから渡される。
(3) 副プログラム ADDP の実行例を図に示す。
図 副プログラム ADDP の実行例
(4) 主プログラムに戻るとき,汎用レジスタ GR2,GR3 の内容を元に戻す。
〔副プログラム ADDP〕
ADDP START ; ST GR1,A ; ST GR2,B ; PUSH 0,GR3 ; LEA GR3,0 ; 結果の領域の初期化 ST GR3,RES ; LOOP1 AND GR1,MASK1 ;整数aから4ビットを抽出 AND GR2,MASK1 ;整数bから4ビットを抽出 LEA GR0,0 ; ST GR2,WORK ; 4ビットの加算 ADD GR1,WORK ; CPA GR1,TEN ;結果≧10? JMI NOTOVR ;NO SUB GR1,TEN ;結果から10減算 LEA GR0,1 ;けた上げの設定 NOTOVR SLL GR1,0,GR3 ;4ビットの加算結果を元のビット位置へ OR GR1,RES ;中間結果に併合 LEA GR3,4,GR3 ; CPA GR3,SIXTEN ;全けた終了? JZE FIN1 ;YES ST GR1,RES ;中間結果を格納 LD GR1,A ; 整数aの次の4ビットを右端へ SRL GR1,0,GR3 ; LD GR2,B ; 整数bの次の4ビットを右端へ SRL GR2,0,GR3 ; ST GR0,WORK ; けた上げ分を加算 ADD GR1,WORK ; JMP LOOP1 ; FIN1 POP GR3 ; LD GR2,B ; RET ; MASK1 DC #000F ; TEN DC 10 ; SIXTEN DC 16 ; A DS 1 ; B DS 1 ; RES DS 1 ; WORK DS 1 ; END ;
設問1 次の文中の に 入れる正しい答えを,解答群の中から選べ。
主プログラムから渡された GR1 と GR2 の内容が次のとおりであった場合, ADDP はその実行後,GR0 に を,GR1 に を 設定して,主プログラムに返す。
GR1 = 0101 0010 1001 1000
GR2 = 0100 1000 0101 0011
解答群
ア 0000 0000 0000 0000 イ 0000 0000 0000 0001
ウ 0000 0001 0101 0001 エ 0100 1000 0101 0011
オ 0101 0010 1001 1000 カ 1001 1001 1001 1001
キ 1010 0001 0101 0001 ク 1111 1111 1111 1111
設問2 副プログラム ADDP を使用して, BCD コードで表現された二つの整数 m,n (m ≧ 0,n ≧ 0)に対し, ある演算を行う副プログラム CALC を作成した。
(1) m と n は,それぞれ GR1 と GR2 に格納されて,主プログラムから渡される。
(2) 演算結果を GR1 に格納する。
(3) 主プログラムに戻るとき,汎用レジスタ GR2,GR3 の 内容を元に戻す。
表は,主プログラムから渡される m と n の値,主プログラムに返す GR1 の値,及び 副プログラム ADDP を呼び出す回数を示す。ただし,表中及び 解答群中の値はすべて 10 進数とする。
表中の に入れる 正しい答えを,解答群の中から選べ。
表 各値の対応
主プログラムから渡される値
主プログラムに返す
GR1 の値
ADDP を
呼び出す回数
m
n
123
45
51
3579
〔副プログラム CALC〕
CALC START ; PUSH 0,GR2 ; レジスタの退避 PUSH 0,GR3 ; ST GR1,M ; LEA GR1,0 ;結果の初期化 LD GR3,M ; LOOP2 AND GR3,MASK2 ;ループ回数→GR3 JZE NDIGIT ; LOOP3 CALL ADDP ; CPA GR0,ZERO ; JNZ FIN3 ;あふれ LEA GR3,-1,GR3 ; JNZ LOOP3 ; NDIGIT LD GR3,M ; SRL GR3,4 ;M÷10 JZE FIN3 ; ST GR3,M ; CPA GR2,LIMIT ; JPZ FIN2 ;あふれ SLL GR2,4 ;N×10 JMP LOOP2 ; FIN2 LEA GR0,1 ; FIN3 POP GR3 ; レジスタの復元 POP GR2 ; RET ; MASK2 DC #000F ; ZERO DC 0 ; LIMIT DC #1000 ; M DS 1 ; END ;
c,e に関する解答群
ア 0 イ 70 ウ 78 エ 168
オ 737 カ 2529 キ 3528 ク 3579
ケ 5535 コ 7158
d,f に関する解答群
ア 0 イ 1 ウ 2 エ 3
オ 6 カ 9 キ 45 ク 51
ケ 123 コ 3579