問14 次のアセンブラプログラムの説明及びプログラムを 読んで,設問 1 〜 4 に答えよ。
〔プログラムの説明〕
与えられたビット列を語に挿入する副プログラム AFLD である。AFLD を作成するために ビット列を移動する副プログラム MVFLD を使用する。
(1) MVFLD は,図 1 に示すようにビット列のデータを移動する。
(2) AFLD は,図 2 に示す形式のパラメタに基づき,挿入元の第 0 ビットから 長さ m ビットのデータを挿入先の第 p ビットに挿入する。パラメタの先頭アドレスは GR1 に格納されて,主プログラムから渡される。
(3) 各副プログラムは呼び出されたプログラムに戻るとき, 汎用レジスタ GR1 〜 GR3 の内容を元に戻す。
〔プログラム〕
(行番号) 01 MVFLD PUSH 0,GR2 ; レジスタを退避する 02 PUSH 0,GR3 ; 03 LD GR3,FULLB ; マスクの作成 04 SRL GR3,0,GR1 ; 05 EOR GR3,FULLB ; 06 ST GR3,TEMP ; マスクデータを格納する 07 AND GR0,TEMP ; 複写先の領域をクリアする 08 SRL GR2,0,GR1 ; 複写元の内容の位置を合わせる 09 ST GR2,TEMP ; 10 OR GR0,TEMP ; 複写元の内容を格納する 11 POP GR3 ; レジスタを復元する 12 POP GR2 ; 13 RET ; 14 TEMP DS 1 ; 15 FULLB DC #FFFF ; 16 ; 17 AFLD PUSH 0,GR2 ; レジスタを退避する 18 PUSH 0,GR3 ; 19 LD GR3,0,GR1 ; DST の内容を取り出す 20 LD GR0,0,GR3 ; 21 ST GR0,SVFLD ; DST の内容を一時保存する 22 LD GR3,1,GR1 ; SRC の内容を取り出す 23 LD GR2,0,GR3 ; 24 PUSH 0,GR1 ; 25 LD GR1,2,GR1 ; DST の位置を取り出す 26 CALL MVFLD ; SRC の内容を DST に格納する 27 POP GR1 ; 28 LD GR2,SVFLD ; DST の壊れた内容を復元する 29 LD GR3,2,GR1 ; SRC の移動ビット数を求める 30 SLL GR2,0,GR3 ; DST の内容を左詰めにする 31 PUSH 0,GR1 ; 32 ADD GR3,3,GR1 ; DST の位置を求める 33 LEA GR1,0,GR3 ; 34 CALL MVFLD ; DST に内容を格納する 35 POP GR1 ; 36 LD GR3,0,GR1 ; 37 ST GR0,0,GR3 ; 結果を格納する 38 POP GR3 ; レジスタを復元する 39 POP GR2 ; 40 RET ; 41 SVFLD DS 1 ; 42 END
解答群
ア #0056 イ #00FF ウ #1234 エ #1256 オ #FF00
MVFLD JZE ZEROP
PUSH 0,GR2 ; レジスタを退避する ・ ・ ・ POP GR2 ; RET ;
ZEROP LEA GR0,0,GR2 ; RET TEMP DS 1 ; FULLB DC #FFFF ; ・ ・ ・
ア LD GR0,0,GR1 イ LD GR1,0,GR1 ウ LD GR2,0,GR1
エ LEA GR1,0,GR1 オ LEA GR1,0,GR2 カ LEA GR1,0,GR3
ア #00F0 イ #F0F0 ウ #FF0F エ #FFF0 オ #FFFF
LEA GR3,16 SUB GR3,2,GR1 SUB GR3,3,GR1 LEA GR0,0,GR2
ア SLL GR2,0,GR1 イ SLL GR2,0,GR3 ウ SLL GR3,0,GR2
エ SRL GR2,0,GR1 オ SRL GR2,0,GR3 カ SRL GR3,0,GR2