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