CASLIIで質問です
1 の連続するビットパターンに特化した検索を行う副プログラム BP1SRH を使用して,映画館の指定席を予約する副プログラム RESERVE です。
(1) 映画館の指定席は 1,024 席あり,座席番号は 0 ~ 1023 である。また,指定席は座席番号順に 16 席ごとにグループ化されている。指定席管理表は連続する 64 語からなり,先頭の語のビット番号 15 が座席番号 0 の状態を,末尾の語のビット番号 0 が座席番号 1023 の状態を表す。指定席管理表の対応するビットが 1 のとき空席を,0 のとき予約済を表す。
(2) 主プログラムは,予約すべき席数 n( 1 ≦ n ≦ 16 )を GR1 に,指定席管理表の開始アドレスを GR2 に設定して,RESERVE を呼ぶ。
(3) RESERVE は,指定された数の席を連続して,かつグループをまたがらないで確保する。座席番号 0 から順に空席を探し,見つかれば“予約済”の状態にして,確保された一番若い番号の座席番号を GR0 に設定し,主プログラムに戻る。確保できなければ,-1 を GR0 に設定して主プログラムに戻る。
(4) RESERVE から戻るとき,汎用レジスタ GR1 ~ GR7 の内容は元に戻す。
(5) BP1SRH に与えるパラメタは,次の形式とする。
(GR1)+0 検索対象語
(GR1)+1 N(連続する1ビットの個数;1≦N≦16)
(行番号)
1 BPSRH START
2 RPUSH
3 LD GR6,1,GR1
4 LAD GR7,16
5 SUBA GR7,GR6 ; GR7 ←(16 - n)
6 LAD GR2,#8000
7 SRA GR2,-1,GR6
8 LD GR4,GR2
10 LAD GR0,-1 ; 戻り値の初期化
11 LAD GR3,0 ; 照合位置ポインタの初期化
12 LD GR5,0,GR1
13 LOOP LD GR6,GR5 ; GR6 は作業用として使用
14 AND GR6,GR4
15 CPL GR6,GR2 ; ビットパターンとの照合
16 JZE FIND
17 LAD GR3,1,GR3 ; 次の照合位置を設定
18 CPA GR3,GR7 ; 未照合部分が n ビット以上あるか?
19 JPL EXIT
20
21 JUMP LOOP
22 FIND LAD GR0,15 ; ビット番号の算出
23 SUBA GR0,GR3
24 EXIT RPOP
25 RET
26 END
RESERVE START
RPUSH
1 LD GR6,GR1 ; n の保存
2 LAD GR1,PARAM
3 ST GR6,1,GR1 ; BP1SRH 呼出しパラメタ準備 (1)
4 ST GR2,TBLADD ; 指定席管理表の開始アドレス保存
5 LAD GR4,64,GR2
6 LAD GR0,-1 ; 戻り値の初期化
LOOP 7 CPL GR2,GR4 ; 検索終了?
8 JZE EXIT
9 LD GR5,0,GR2 ; 指定席管理表から1語取出し
10 ST GR5,0,GR1 ; BP1SRH 呼出しパラメタ準備 (2)
11 CALL BP1SRH ; 1語中の空席を検索
12 CPA GR0,=-1
13 JNZ FIND
14 LAD GR2,1,GR2 ; 次の語を検索へ
15 JUMP LOOP
FIND 16 LAD GR3,15
17 SUBA GR3,GR0 ; GR3 ←(15 - GR0)
18 LAD GR7,#8000
19 SRA GR7,-1,GR6
20 SRL GR7,0,GR3
21 XOR GR7,=#FFFF ; GR7 ← 1110000111111111(GR0=12,n=4 の場合)
22 AND GR5,GR7 ; 予約済に設定
23 ST GR5,0,GR2
24 SUBL GR2,TBLADD ; 座席番号の算出
25 SLL GR2,4
26 ADDA GR2,GR3
27 LD GR0,GR2
EXIT RPOP
RET
TBLADD DS 1
PARAM DS 2 ; BP1SRH 呼出し用パラメタ領域
END
質問はとりあえず3つです。
(一つ目)
(1)の問題文で、64語の指定席管理表を作成すると書かれていますが指定座席管理表は副プログラムBP1SRHの対象の列と照合して、空席を検索するための対象となるものと理解しますが、64語が出てくる意味がわからないです。座席の数からして1024語ではないのでしょうか。
(二つ目)
副プログラムRESERVEの1行目に「LD GR6,GR1 ; N の保存」と書かれていますが、BP1SRH に与えるパラメタから判断するとNではなく、GR6に
検索対象語を入れるのではないでしょうか。
(三つ目)
それと二行目と三行目の解釈の仕方がわかりませんでした。
2行目に関しては、PARAMのおいてあるアドレスをGR1に入れるということなのでしょうが、どのようなアドレスを入れるのでしょうか。
3行目は読み方はわかるのですが、右に書いてある添え字の意味が
わかりませんでした。
2 LAD GR1,PARAM
3 ST GR6,1,GR1 ; BP1SRH 呼出しパラメタ準備 (1)
かなり冗長になってしましましたがよろしくお願いいたします。
お礼
レス有難うございます。 丁寧なレスでとても理解できました。 ありがとうございます。