CASLII(以前の問題について)
次のプログラムに、
指定された整数値配列の平均値(整数値)を調べるサブルーチンAVEを作成する、
という問題で、手も足もでないということで以前に質問させていただきました。
丁寧な回答をいただいたのですが、それとは別に、AVEを作ってみました。
ところが、どこかが間違っているらしく、うまく動きません。
それどころか、だらだらと長くなってしまい、自分自身でも途中からわからなくなってしまいました。。
このたどたどしいプログラムの修正と、解説をどなたか回答していただけませんでしょうか??
あと、上記のSUMがコールされたあとのGR0の役割、
SUM内おけるGR0、GR7の役割、
SUM内においてGR1、GR7をPUSH、POPする理由、
サブルーチンSUMの機能を教えてください。
お願いいたします!!
元からあるプログラム
PGM START
LAD GR1, DATA
LD GR2, =10
CALL SUM
ST GR0, RESULT
RET
DATA DC 1,9,3,7,5,10,2,8,4,6
RESULT DS 1
END
SUM START
PUSH 0, GR1
PUSH 0, GR7
LD GR0, =0
LD GR7, =0
MAIN CPA GR7, GR2
JZE QUIT
ADDA GR0, 0, GR1
LAD GR1, 1, GR1
LAD GR7, 1, GR7
JUMP MAIN
QUIT POP GR7
POP GR1
RET
END
自分が作成したAVEのプログラム
PGM START
LAD GR1,DATA
LD GR2,=10
LD GR0,=100
LD GR6,=6
LD GR5,GR6
CALL AVE
ST GR0,RESULT
RET
DATA DC 1,9,3,7,5,10,2,8,4,6
RESULT DS 1
END
SUM START
PUSH 0,GR1
PUSH 0,GR7
LD GR0,=0
LD GR7,=0
MAIN CPA GR7,GR2
JZE QUIT
ADDA GR0,0,GR1
LAD GR1,1,GR1
LAD GR7,7,GR7
LAD GR6,6,GR6
JUMP MAIN
QUIT POP GR7
POP GR1
CALL AVE
RET
END
AVE START
PUSH 0,GR6
LD GR3,=0
CPA GR0,GR6
JMI AQUIT
SHIFT CPA GR0,GR6
JMI STEP
SLA GR6,1
JUMP SHIFT
STEP SRA GR6,1
STEP1 CPA GR0,GR6
JMI STEP2
SLA GR3,1
SUBA GR0,GR6
ADDA GR3,=1
JUMP STEP3
STEP2 SLA GR3,1
STEP3 SRA GR6,1
CPA GR6,GR5
JMI AQUIT
CPA GR0,=0
JZE AQUIT
JUMP STEP1
AQUIT POP GR6
RET
END
お礼
>BPSRH は BP1SRH の入力間違いじゃないかと思うのですが。 恥ずかしながら、その通りです。 >具体的な「数字」がどうか。という質問ですが、これは実行するときに決まるものでプログラムを書いているこの時点では気にする必要はありません。単にその場所にいずれは1000番地だとか2000番地という具体的な数字がつきますが、今はPARAM という名前で識別される場所という理解で良いと思います。 なるほど、LAD命令が着たら、DS命令やパラメタ領域などの何かしらの領域が 与えられて場所がそこに決まると考えればよろしいのですね。 (一つ目) #1の回答でOKでしょうか? 申し遅れていてすみませんでした。大丈夫です。理解しました。 >もし可能なら、CASLシミュレーターとかで実際にプログラムを 動かしてみるといいと思うのですがどうでしょう? そうですね。何回か試したことがあるのですが、なぜか途中で止まってしまってできなかったです。ですが、その原因も粘り強く考えてできるだけお世話になる回数を減らして行こうと思っております。 見ず知らずの人間のためにこんな丁寧に回答していただいてありがとうございました。