アプリ版:「スタンプのみでお礼する」機能のリリースについて

文字の'123'を数値の123に変換するプログラムをCASLで作るという課題が出来ずに困っています。

下記の手順を説明されたのですが、特に(2)と(3)がわからず困っています。
(1)数字を数値に変換
(2)3回ループするロジックを作る
(3)1,2,3という1つ1つの数値を計算して123に変換する

CASLがわかる方よろしくお願いします。

A 回答 (2件)

(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
   

この回答への補足

無料のシュミレータを見つけることができ、作ってみたのですがやはりよくわかりません。

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になってしまいます。
どこを直せばいいのでしょうか?

補足日時:2007/07/07 20:25
    • good
    • 0
この回答へのお礼

ありがとうございます。
頑張ってみます。

学校でCASLIIシュミレータというソフトを使っているのですが、
こういったソフトは有料でしょうか?

お礼日時:2007/07/07 16:02

>実行は出来たのですが、GR3に入る値が1235になってしまいます。


>どこを直せばいいのでしょうか?

全部。

なんてシミュレータで実行したら 1235になったのでしょうか?

InfoCASL Home Page
http://www.rs.kagu.tus.ac.jp/infoserv/j-siken/in …

で試したら異常終了しましたよ。
まあシミュレータのバグという話もなくはありませんが、
少なくとも

・ループ回数の判定がない
CPA   GR2,GR3 で、レジスタに入っている値は
それぞれ何?

・レジスタの値を十倍する部分がおかしい
GR1を十倍にしようとしている?

・問題では文字列の '123' を数値化するように書かれているのに
DC で置かれているのは数値の1,2,3
もっとも、文字を数値にする('0'を引く)ことを
していないのである意味つじつまは合ってますが。

あたりをもう一度考え直した方がよいかと。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!