問14 次のアセンブラプログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。
〔プログラムの説明〕
副プログラム REVRS は,16 ビットからなるビット列の並びの順序を逆にする。
(1) ビット列は,主プログラムから,GR0 に格納されて渡される。
(2) 並びの順序を逆にしたビット列は,GR0 に格納して,主プログラムに戻す。
図1 副プログラムREVRSの実行例
(3) この副プログラムから戻るとき,汎用レジスタ GR1,GR2 の内容を元に戻す。
〔プログラム〕 (行番号) 01 REVRS START ; 02 PUSH 0,GR1 ; レジスタの退避 03 PUSH 0,GR2 ; 04 ST GR0,WORK ; 元のビット列 → GR1 05 LD GR1,WORK ; 06 LEA GR2,16 ;ループカウンタ 07 LEA GR0,0 ;結果のビット列の初期化 08 LEA GR1,0,GR1 ; 09 LOOP JZE FIN ;残りのビットはすべて0 10 JPZ OFF ;左端のビットは0 11 OR GR0,MASK ;結果のビット列の左端のビットを1に 12 OFF LEA GR2,-1,GR2 ;ループカウンタから1減ずる 13 JZE FIN1 ;全ビット処理済み 14 SRL GR0,1 ;結果のビット列を1ビット右にシフト 15 SLL GR1,1 ;元のビット列を1ビット左にシフト 16 JMP LOOP ; 17 FIN SRL GR0,-1,GR2 ;結果のビット列を未処理ビット数だけシフト 18 FIN1 POP GR2 ; レジスタの復元 19 POP GR1 ; 20 RET ; 21 MASK DC #8000 ; 22 WORK DS 1 ; 23 END ;
設問1 主プログラムから,ビット列 1101 0111 0100 0000 が渡されたとき,説明文中の に入れる正しい答えを,解答群の中から選べ。
(1) 16 行目の JMP 命令を,3 回目に実行する時点での GR0 の内容は である。
(2) 17 行目の SRL 命令を実行する時点での GR2 の内容は である。
a に関する解答群
ア 0000 0000 0000 0110 イ 0011 0000 0000 0000
ウ 0110 0000 0000 0000 エ 1100 0000 0000 0000
b に関する解答群
ア 3 イ 4 ウ 6 エ 7
設問2 連続する N 語(N≧1)を 16×N ビットからなるビット列とみなす。この 16×N ビットの並びの順序を逆にして,元の N 語に格納する副プログラム REVRSN を, 副プログラム REVRS を使用して作成した。
(1) 連続する N 語の先頭アドレスは,GR1 に格納されて,主プログラムから渡される。
(2) 語数 N は,GR0 に格納されて,主プログラムから渡される。
図2 副プログラムREVRSNの実行
副プログラム REVRSN 中の に入れる 正しい答えを,解答群の中から選べ。
REVRSN START ; PUSH 0,GR1 ; PUSH 0,GR2 ; ST GR0,WORK1 ; LEA GR2,-1,GR1 ; 最終語のアドレス → GR2 ADD GR2,WORK1 ; LOOP LD GR0,0,GR1 ; CALL REVRS ; ST GR0,WORK1 ; LD GR0,0,GR2 ; CALL REVRS ; ST GR0,0,GR1 ; ; ST GR0,0,GR2 ; LEA GR1,1,GR1 ; LEA GR2,-1,GR2 ; ST GR1,WORK1 ; CPA GR2,WORK1 ; ; POP GR2 ; POP GR1 ; RET ; WORK1 DS 1 ; END ;
解答群
ア JNZ LOOP イ JPZ LOOP ウ JZE LOOP
エ LD GR0,0,GR1 オ LD GR0,0,GR2 カ LD GR0,WORK1
キ LEA GR0,0,GR1 ク LEA GR0,0,GR2 ケ LEA GR0,WORK1 <