- 締切済み
CASLIIの問題で困っています
文字の'123'を数値の123に変換するプログラムをCASLで作るという課題が出来ずに困っています。 下記の手順を説明されたのですが、特に(2)と(3)がわからず困っています。 (1)数字を数値に変換 (2)3回ループするロジックを作る (3)1,2,3という1つ1つの数値を計算して123に変換する CASLがわかる方よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sakusaker7
- ベストアンサー率62% (800/1280)
>実行は出来たのですが、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)
(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
お礼
ありがとうございます。 頑張ってみます。 学校でCASLIIシュミレータというソフトを使っているのですが、 こういったソフトは有料でしょうか?
補足
無料のシュミレータを見つけることができ、作ってみたのですがやはりよくわかりません。 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になってしまいます。 どこを直せばいいのでしょうか?