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


問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 の機能は, それぞれ次のとおりとする。


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

〔プログラム〕

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
;
RSVTBLSZ DC 64 ; 予約テーブルの大きさ
RSVTBL DS 64 ; 予約テーブル END
設問1  プログラム中の に入れる正しい答えを,解答群の中から選べ。

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


設問2  プログラム中のα,βを次のとおりに変更した。 この結果,対応できる指定席数の最大値として正しい答えを,解答群の中から選べ。

RSVTBLSZ   DC    120                    ; 予約テーブルの大きさ
RSVTBL     DS    120                    ; 予約テーブル

解答群

ア 960     イ 1,440     ウ 1,920

エ 2,400    オ 2,880


東京理科大学 infoserv 戻る