• 締切済み

CASLIIの問題で困っています

文字の'123'を数値の123に変換するプログラムをCASLで作るという課題が出来ずに困っています。 下記の手順を説明されたのですが、特に(2)と(3)がわからず困っています。 (1)数字を数値に変換 (2)3回ループするロジックを作る (3)1,2,3という1つ1つの数値を計算して123に変換する CASLがわかる方よろしくお願いします。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>実行は出来たのですが、GR3に入る値が1235になってしまいます。 >どこを直せばいいのでしょうか? 全部。 なんてシミュレータで実行したら 1235になったのでしょうか? InfoCASL Home Page http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/infocasl/index.html で試したら異常終了しましたよ。 まあシミュレータのバグという話もなくはありませんが、 少なくとも ・ループ回数の判定がない CPA   GR2,GR3 で、レジスタに入っている値は それぞれ何? ・レジスタの値を十倍する部分がおかしい GR1を十倍にしようとしている? ・問題では文字列の '123' を数値化するように書かれているのに DC で置かれているのは数値の1,2,3 もっとも、文字を数値にする('0'を引く)ことを していないのである意味つじつまは合ってますが。 あたりをもう一度考え直した方がよいかと。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

(1)は、文字コードから48(0の文字コード)を引き算すればいいですね。 (2)は、ループの前にGR0からGR7のどれかのレジスタに3を代入しておく。で、ループの最後でレジスタから1を引き算して、その結果が0以上であれば、ループの先頭に戻る。例えばこんな感じ    LAD GR0, 3 LOOP ループここから     …    ここまで    SUBL GR9, =1    JNZ LOOP (3)は、与えられた数の10倍を計算するルーチンが必要です。CASLIIに掛け算の命令はないので、8倍したものと2倍したものを足し算します。こんな感じ。GR0に入っている数字を10倍します。    SLL GR0, 1    LD GR1, GR0    SLL GR0, 2    ADDL GR0, GR1    

aobo-zu
質問者

お礼

ありがとうございます。 頑張ってみます。 学校でCASLIIシュミレータというソフトを使っているのですが、 こういったソフトは有料でしょうか?

aobo-zu
質問者

補足

無料のシュミレータを見つけることができ、作ってみたのですがやはりよくわかりません。 TEN  START  BGN TBL   DC   1,2,3 BGN   LAD   GR2,0     LAD   GR3,0 LOOP  LD   GR1,TBL,GR2      ADDA  GR1,GR3      SLL   GR1,1      LD   GR1,GR2      SLL   GR1,2      ADDA   GR1,GR2      LD   GR3,GR1      LAD   GR2,1,GR2     CPA   GR2,GR3      JPL   LOOP     ADDA   GR3,TBL,GR3      RET      END 実行は出来たのですが、GR3に入る値が1235になってしまいます。 どこを直せばいいのでしょうか?

関連するQ&A

専門家に質問してみよう