問11
次のアセンブラプログラムの説明及びプログラムを読んで,設問 1,2 に答えよ。
〔プログラムの説明〕
映画館の指定席を管理するための副プログラム群である。 映画館の指定席は 1,024 席あり,座席番号は 0 〜 1023 である。 副プログラムには,指定席予約テーブル RSVTBL を初期化する INIT, 指定席を予約する RESERVE 及び指定席の予約を取り消す CANCELがある。 指定席の状態を格納する指定席予約テーブルの構造を図に示す。
図 指定席予約テーブル RSVTBL
(1) 副プログラム INIT は,指定席予約テーブルのすべてのビットを “空”の状態にする。
(2) 副プログラム RESERVE は,指定席を一つ予約する。 処理は座席番号 0 から順に“空”の座席を探し,見つかれば “予約済”の状態にして,座席番号を GR0 に格納する。 指定席がすべて予約されている場合には,GR0 に−1 を格納して戻る。
(3) 副プログラム CANCEL は,GR1 で指定された座席番号の予約を取り消す。 指定された座席が“予約済”の状態であることを確認して,“空”の状態に変更する。 取消しの処理が正常に終了すれば,GR0 に 0 を格納する。 座席番号の指定誤り,又は座席番号で指定した座席が“空”の場合には, GR0 に −1 を格納して戻る。
(4) GR0 を除いて,すべての副プログラムで使用する汎用レジスタの内容は保存される。
(5) プログラム内で使用しているマクロ命令 RPUSH,RPOP の機能は, それぞれ次のとおりとする。
〔プログラム〕
MAIN START ・ ・ ・ ; 指定席予約テーブルの初期化 INIT PUSH 0,GR1 LD GR1,RSVTBLSZ LAD GR0,0 CLEARP LAD GR1,-1,GR1 ; 0 → RSVTBL LD GR1,GR1 JNZ CLEARP POP GR1 RET ; 指定席の予約 RESERVE RPUSH LAD GR2,0 LD GR0,GR2 RSV01 LD GR1,RSVTBL,GR2 ; 16席がすべて予約済? JZE RSV03 LAD GR3,#8000 RSV02 LD GR4,GR1 AND GR4,GR3 ; 各座席の予約チェック JZE RSV04 ADDL GR0,=1 ; 次の座席の準備 JUMP RSV02 RSV03 ADDL GR0,=16 LAD GR2,1,GR2 CPL GR2,RSVTBLSZ JNZ RSV01 ; 空席なし JUMP RRET RSV04 OR GR1,GR3 ST GR1,RSVTBL,GR2 RRET RPOP RET ; 指定席の予約を取り消す CANCEL RPUSH LD GR2,GR1 ; 語の位置を求める CPL GR1,RSVTBLSZ JPL CERROR JZE CERROR LAD GR1,RSVTBL,GR1 AND GR2,=#000F LAD GR3,#8000 SRL GR3,0,GR2 ; ビット位置を求める LD GR0,0,GR1 AND GR0,GR3 JZE CERROR ; ビットを反転する LD GR0,0,GR1 AND GR0,GR3 ST GR0,0,GR1 LAD GR0,0 JUMP CRET CERROR LAD GR0,-1 CRET RPOP RET ;
a に関する解答群
ア ST GR0,0,GR1 イ ST GR0,RSVTBL,GR1
ウ ST GR1,0,GR1 エ ST GR1,RSVTBL,GR1
オ ST GR2,0,GR1 カ ST GR2,RSVTBL,GR1
b に関する解答群
ア CPL GR0,-1 イ CPL GR0,=0 ウ CPL GR0,=#FFFF
エ CPL GR1,-1 オ CPL GR1,=0 カ CPL GR1,=#FFFF
c,e に関する解答群
ア SLL GR1,1 イ SLL GR1,4 ウ SLL GR3,1
エ SLL GR3,4 オ SRL GR1,1 カ SRL GR1,4
キ SRL GR3,1 ク SRL GR3,4
d に関する解答群
ア LAD GR0,-1 イ LAD GR1,-1 ウ LD GR0,-1
エ LD GR1,-1
f に関する解答群
ア AND GR3,-1 イ AND GR3,=#FFFF ウ OR GR3,-1
エ OR GR3,=#FFFF オ XOR GR3,-1 カ XOR GR3,=#FFFF
RSVTBLSZ DC 120 ; 予約テーブルの大きさ RSVTBL DS 120 ; 予約テーブル
解答群
ア 960 イ 1,440 ウ 1,920
エ 2,400 オ 2,880