- ベストアンサー
CASLIIで質問です
- 座席の管理表についての疑問
- 副プログラムRESERVEのGR1とGR6の関係についての疑問
- 副プログラムRESERVEのパラメータに関する疑問
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正直文字だけでやるのは面倒なんですがなんとか。 問題文に |(5) BP1SRH に与えるパラメタは,次の形式とする。 |(GR1)+0 検索対象語 |(GR1)+1 N(連続する1ビットの個数;1≦N≦16) とありますが、このときの GR1 の値は PARAM の場所のアドレスになってますから、 PARAM +0 に検索対象語 PARAM +1 に N が格納された状態でBP1SRH を呼び出すということです。 で、 >添え字というのは1のことですか? |申し訳ありませんでした。添え字ではなく、横の解説文のことです。 |「BP1SRH 呼出しパラメタ準備 (1)」と書かれており、この場合ならば、 |Nを1+GR1に入れるということだと思いますがなぜNをGR1+1に入れる |とこのような表現を使うのかがわかりません。 この (1)は、「BP1SRH 呼出しパラメタ準備」 の 「その1」ですね。 ちょっと下に行ったところに |10 ST GR5,0,GR1 ; BP1SRH 呼出しパラメタ準備 (2) というのがありますが、(1) とこの(2) と両方やって BP1SRH を呼び出すための準備が完了します。 そして |11 CALL BP1SRH ; 1語中の空席を検索 ここで実際にBP1SRH という「サブルーチン」を呼び出しているというわけです。 ところが質問にあるプログラムでは |1 BPSRH START と |RESERVE START の二つだけで BP1SRH という名前のものがありません。 ひょっとしたらこの BPSRH は BP1SRH の入力間違いじゃないかと思うのですが。 話を PARAMにもどすと、これは |PARAM DS 2 ; BP1SRH 呼出し用パラメタ領域 の様に2語分用意されています。そして PARAM +--------+ | |「BP1SRH 呼出しパラメタ準備 (2)」でセットする部分 +--------+ | |「BP1SRH 呼出しパラメタ準備 (1)」でセットする部分 +--------+ 具体的な「数字」がどうか。という質問ですが、これは実行するときに決まるもので プログラムを書いているこの時点では気にする必要はありません。単にその場所に いずれは1000番地だとか2000番地という具体的な数字がつきますが、今は PARAM という名前で識別される場所という理解で良いと思います。 |2 LAD GR1,PARAM |3 ST GR6,1,GR1 ; BP1SRH 呼出しパラメタ準備 (1) 2行目で GR1 に PARAM というアドレスをセットして、 3行目で PARAM + 1 番地に GR6 の内容をセットしています。 あらためて元の質問に答えると (一つ目) #1の回答でOKでしょうか? (二つ目) |副プログラムRESERVEの1行目に「LD GR6,GR1 ; N の保存」と書かれていますが、 |BP1SRH に与えるパラメタから判断するとNではなく、GR6に |検索対象語を入れるのではないでしょうか。 このNというのはRESERVE を呼び出すときのパラメータで、GR1に格納された状態で RESERVEが実行されます。 |(2) 主プログラムは,予約すべき席数 n( 1 ≦ n ≦ 16 )を GR1 に, と問題文にあるとおりです。 そして、RESERVE からBP1SRH を呼び出すときは GR1 はPARAM で表されるアドレスになります。 また、主プログラムから渡された n は PARAM + 1番地に収めておきます。 GR6 は単なる作業用ですね。 (三つ目) |それと二行目と三行目の解釈の仕方がわかりませんでした。 |2行目に関しては、PARAMのおいてあるアドレスをGR1に入れるということなのでしょうが、 |どのようなアドレスを入れるのでしょうか。 |3行目は読み方はわかるのですが、右に書いてある添え字の意味がわかりませんでした。 |2 LAD GR1,PARAM |3 ST GR6,1,GR1 ; BP1SRH 呼出しパラメタ準備 (1) 前述したように、PARAMは実行時までに具体的なXXXX番地というのが決まりますが ここではどういうアドレスになるかということは気にしないでよいです(PARAMという 名前で区別や指示ができるというところだけ抑えておけばOK)。 もし可能なら、CASLシミュレーターとかで実際にプログラムを 動かしてみるといいと思うのですがどうでしょう?
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
質問の趣旨はわかりました。 今は長い回答を書けないので、ちょっと時間をください。 あと、質問の1番目の何で64語しか確保してないのかという のは#1の回答で納得されましたか?
- sakusaker7
- ベストアンサー率62% (800/1280)
1つめは、一語辺り16ビットあるので、16×64で1024ビット。 席ひとつあたり1ビットあれば十分なのでこれでOKなわけです。 2つめは 11 CALL BP1SRH ; 1語中の空席を検索 これで呼び出しているサブルーチンが見当たらないのでなんとも。 多分どこかでGR1(最初はnが入っている)を壊しているので、あらかじめ GR6に「保存」しているということでしょう。 3つめは 2 LAD GR1,PARAM 3 ST GR6,1,GR1 ; BP1SRH 呼出しパラメタ準備 (1) どのようなアドレスって、PARAM の場所が GR1に入るはずですがどこがわからんのでしょうか? 添え字というのは1のことですか? GR1の値に1を加えた値をSTの対象アドレスにするということですね。 このくらいは参考書に説明がありそうなものですが、いったいどういう勉強のされ方をしているのですか?
補足
>どのようなアドレスって、PARAM の場所が GR1に入るはずですがどこがわからんのでしょうか? 参考書を読むと、LADは指定したところのアドレスが納入される命令と 書かれていました。しかし、このプログラムは行番号が書かれていないですし、具体的にどういった数字のアドレスがGR1に入るのかをお聞きしたかったです。 そもそも、この番地というのが参考書を読んでもよくわからなかったです。このプログラムには番地などは記載されていないので、何をGR1に入れればいいのかがわかりませんでした。 >これで呼び出しているサブルーチンが見当たらないのでなんとも。 sakusaker7さんがおっしゃっている、サブルーチンがどういうものか わからないのですが、私が解釈しているものは問題文に書かれているもの(下にコピペしたもの)であり、GR1をGR6にそのまま入れるならば、検索対象語が入るのであり、(GR1)+1に入っているNは入らないのではないかと思ったからです。 (5) BP1SRH に与えるパラメタは,次の形式とする。 (GR1)+0 検索対象語 (GR1)+1 N(連続する1ビットの個数;1≦N≦16) >添え字というのは1のことですか? 申し訳ありませんでした。添え字ではなく、横の解説文のことです。 「BP1SRH 呼出しパラメタ準備 (1)」と書かれており、この場合ならば、Nを1+GR1に入れるということだと思いますがなぜNをGR1+1に入れると このような表現を使うのかがわかりません。 >このくらいは参考書に説明がありそうなものですが、いったいどういう勉強のされ方をしているのですか? 申し訳ありません。私の理解力が乏しい上にプログラミングの経験が ありませんので参考書を読んでもいまいち理解できませんでした。 なので、とりあえず軌道がいくらずれてもいいので、読んでみるという スタイルをとり、わからなければ質問させていただくという形です。 なので、sakusaker7さんにとっては大変馬鹿馬鹿しい質問に思えたかもしれません。
お礼
>BPSRH は BP1SRH の入力間違いじゃないかと思うのですが。 恥ずかしながら、その通りです。 >具体的な「数字」がどうか。という質問ですが、これは実行するときに決まるものでプログラムを書いているこの時点では気にする必要はありません。単にその場所にいずれは1000番地だとか2000番地という具体的な数字がつきますが、今はPARAM という名前で識別される場所という理解で良いと思います。 なるほど、LAD命令が着たら、DS命令やパラメタ領域などの何かしらの領域が 与えられて場所がそこに決まると考えればよろしいのですね。 (一つ目) #1の回答でOKでしょうか? 申し遅れていてすみませんでした。大丈夫です。理解しました。 >もし可能なら、CASLシミュレーターとかで実際にプログラムを 動かしてみるといいと思うのですがどうでしょう? そうですね。何回か試したことがあるのですが、なぜか途中で止まってしまってできなかったです。ですが、その原因も粘り強く考えてできるだけお世話になる回数を減らして行こうと思っております。 見ず知らずの人間のためにこんな丁寧に回答していただいてありがとうございました。