東京理科大学 infoserv[更新日]2001.4.20


問8

 次のアセンブラプログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。

〔プログラムの説明〕

連続する n 語を 16×n ビットからなるビット列とみなす。 副プログラム SHIFT は,このビット列を右へ m ビットシフトする。


図1 副プログラムSHIFTの動作

(1) GR1 〜 GR3 には,それぞれ次の値が格納されて,主プログラムから渡される。


GR1 : ビット列の先頭語のアドレス
GR2 : m
GR3 : n

(2) 1≦n≦32767,0≦m≦16 とする。

(3) シフトしたビット列は,元の領域に格納する。

(4) 左端の空いたビット位置には,0 を格納する。 右端のはみ出したビット列は捨てられる。

(5) プログラムで使用しているマクロ命令 RPUSH,RPOP の機能は,それぞれ次のとおりとする。


RPUSH : GR1 〜 GR7 の内容をスタックに退避する。
RPOP : スタックの内容を GR1 〜 GR7 に復元する。

〔プログラム〕

(行番号)
 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                  ;

設問1  プログラム中の に 入れる正しい答えを,解答群の中から選べ。

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


設問2  図 2 に示すように,右にはみ出したビット列を 左端の空いたビット位置に格納するために,行番号 5 の LAD 命令を 次の三つの命令に置き換えた。 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

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


東京理科大学 infoserv 戻る 次頁:問09