• 締切済み

CASTLII 文字列出力のサブルーチン

学校の課題です。 全体の問題は「10件程度入力した平均点を計算し『入力された得点』と『平均点』を出力せよ」というものです。 平均点を計算し、平均点を出力するところまではできたのですが、入力された得点を出力する最後の所でつまずいてしまいました。 どう考えてもわからないので力を貸してください・・・ 入力された得点を出力するのにこのようなサブルーチンを使っていて、入力された回数分毎回配列から読み出してきてCALLでこのサブルーチンを呼んでます。 出力例としては、「1、2、3」と入力された場合、 1 2 3 のようになるようにしたいです。 GR1の値を出力するようになってます。 BTDA START LAD GR3,BUFFERA LAD GR3,1,GR3 BTDL1A LAD GR2,0 BTDL2A CPL GR1,BTD10A JMI BTDL3A SUBA GR1,BTD10A LAD GR2,1,GR2 JUMP BTDL2A BTDL3A OR GR1,BTDORA ST GR1,0,GR3 LAD GR3,-1,GR3 LD GR1,GR2 JNZ BTDL1A RET BTD10A DC 10 BUFFERA DC ' ' LENGTHA DC 2 BTDORA DC #0030 END このサブルーチンを使うとなぜか、 10 1 2 となるはずが 10 11 12 と出力されてしまいます。 GR1の値はきちんと10、1、2と変わっていきます。 どうやらこのサブルーチンで10を表示するとそれ以降に最初に1がついてしまうようです。 どう考えてもわからないのでどうか助けてください・・・。 プログラミングに詳しくないので非常にわかりにくい説明になってると思いますがお願いします。

みんなの回答

  • beforeos
  • ベストアンサー率100% (1/1)
回答No.2

解決されたようですが、補足に書かれている事にコメントします。 ”DC”は、命令語ではありません。 機械語をメモリへ乗せるとき、命令語と変数領域を確保します。そのとき、DCは、変数領域に最初にこの値を入れておくだけで、機械語がメモリーに載るときに、その値を書いてあるだけです。

noname#210617
noname#210617
回答No.1

>10を表示するとそれ以降に最初に1がついてしまうようです。 10の最初の1が消えていないのでしょう。 1を表示するときに、書式が2桁になっていて、それが、 空白+1の表示ではなく、 [1桁目には何もしない=前の表示がそのまま残る]+[2桁目に1を表示] をしているのではないでしょうか。

yuuki1211
質問者

お礼

どうにか空のレジスタをBUFFERAに毎回代入するようにして解決できました。 CASLIIやっぱり難しいですね 思わぬところで引っかかります

yuuki1211
質問者

補足

おそらくそうなってると思うんですが、サブルーチンを呼ぶたびに BUFFERA DC ' ' でBUFFERAの内容を消していると思うんですけどそれだと消えないんでしょうか。 なぜ一桁目に残ってしまうんでしょうか・・・

関連するQ&A