• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CASLII(以前の問題について))

CASLII質問:プログラム修正と解説

このQ&Aのポイント
  • CASLIIのプログラム修正と解説をお願いします。
  • 指定された整数値配列の平均値を調べるサブルーチンAVEを作成したが、うまく動かない。
  • サブルーチンSUMや各レジスタの役割、GR0の役割について教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

>元からあるプログラム >サブルーチンSUMの機能を教えてください。 配列DATAに格納された数値の合計を求める。 >あと、上記のSUMがコールされたあとのGR0の役割 引数として,GR1に配列の先頭アドレス,GR2に要素数を格納して,サブルーチンをCALLする。 数値の合計は GR0に格納され,戻り値として主ルーチンに返される。 >SUM内おけるGR0、GR7の役割 ループにより配列の先頭から順に要素を参照している。 GR0はループ中の合計値の途中結果を保持,GR7はループカウンタ。 >SUM内においてGR1、GR7をPUSH、POPする理由、 サブルーチンSUMをCALLすることで変化するレジスタの値を GR0だけに限定するため。主ルーチンにとっては,その他のレジスタが変化してしまうという副作用を考慮しなくてよい。

その他の回答 (1)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>自分が作成したAVEのプログラム >このたどたどしいプログラムの修正と、解説をどなたか回答していただけませんでしょうか? =100とか=6とかSLA/SRAとか,それらの必要性が分からないのでパス。 「元からあるプログラム」では,GR0に合計が,GR2に要素数が格納されているのですから,合計値から要素数を繰り返し減算してその回数をカウントすれば平均は求められますよ。 (次の例では55÷10=平均値5。四捨五入などはご自身で工夫してください) 1+9+3+7+5+10+2+8+4+6=55 55-10=45 45-10=35 35-10=25 25-10=15 15-10= 5(10以下になったのでループ終了)

関連するQ&A