問8
次のアセンブラプログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。
〔プログラムの説明〕
連続する n 語を 16×n ビットからなるビット列とみなす。 副プログラム SHIFT は,このビット列を右へ m ビットシフトする。
図1 副プログラムSHIFTの動作
(1) GR1 〜 GR3 には,それぞれ次の値が格納されて,主プログラムから渡される。
(2) 1≦n≦32767,0≦m≦16 とする。
(3) シフトしたビット列は,元の領域に格納する。
(4) 左端の空いたビット位置には,0 を格納する。 右端のはみ出したビット列は捨てられる。
(5) プログラムで使用しているマクロ命令 RPUSH,RPOP の機能は,それぞれ次のとおりとする。
〔プログラム〕 (行番号) 1 SHIFT START ; 2 RPUSH ; レジスタを退避 3 ; 4 SUBA GR4,GR2 ; (16-m)→GR4 5 LAD GR5,0 ; 左端に格納する0のビットの列 6 LOOP SLL GR5,0,GR4 ; 前の語の残りビット列を左端へ詰める 7 LD GR0,0,GR1 ; 現在の語のビット列→GR0 8 ; 9 OR GR0,GR5 ; はみ出したビット列を併合 10 LD GR5,0,GR1 ; 現在の語のビット列をGR5に保存 11 ST GR0,0,GR1 ; 併合したビット列を現在の語に格納 12 LAD GR1,1,GR1 ; 次の語へ位置付け 13 SUBA GR3,=1 ; 14 ; 15 RPOP ; レジスタを復元 16 RET ; 17 END ;
a に関する解答群
ア AND GR4,=16 イ LAD GR4,16
ウ LD GR4,16 エ OR GR4,=16
b に関する解答群
ア SLL GR0,0,GR2 イ SLL GR0,0,GR4
ウ SRL GR0,0,GR2 エ SRL GR0,0,GR4
c に関する解答群
ア JMI LOOP イ JOV LOOP
ウ JPL LOOP エ JZE LOOP
LD GR5,GR1 ADDL GR5,GR3
図2 はみ出したビット列を左端に格納
解答群
ア LD GR5,-1,GR5 イ LD GR5,0,GR5 ウ LD GR5,1,GR5
エ ST GR5,-1,GR1 オ ST GR5,0,GR1 カ ST GR5,1,GR1