LoginSignup
3
1

More than 5 years have passed since last update.

「増やす減らす二倍する」をCASL IIで(横へな13参考)

Posted at

http://qiita.com/Nabetani/items/89fb0e2e712d4b396535
http://nabetani.sakura.ne.jp/hena/ord13updowndouble/
「増やす減らす二倍する」をCASL IIでやってみました。

(えっ、CASLってタグないの?初めて?やった!(笑))

基本的なアルゴリズムは「増やす減らす二倍する」をErlangで(横へな13参考)のものと同じです。
レジスタが16ビット幅なので、元の問題の最後の2問

  • 109227 = 0x1AAAB
  • 174763 = 0x2AAAB

には対応していません(手抜きです)。

答えが合っていたら . 間違っていたら x を表示します。

CASLシミュレータで動作確認しています。

UPDOWN  START   TEST            ;TESTからスタートする

;解くルーチン
;GR1=値, GR2=カウンタ, GR0=戻り値
SOLVE   OR      GR1,DC0         ;値が0ならカウンタ値を返す
        JNZ     NOT0
        LAD     GR0,0,GR2
        RET
NOT0    CPL     GR1,DC3         ;値が3ならカウンタ値に3を加えて返す
        JNZ     NOT3
        LAD     GR0,3,GR2
        RET
NOT3    LAD     GR3,0,GR1       ;最下位ビットが0なら
        AND     GR3,DC1         ;値を2で割りカウンタに1を加えてループ
        JNZ     NOTDIV2
        SRL     GR1,1
        JUMP    COUNTUP
NOTDIV2 LAD     GR3,0,GR1       ;下2ビットが01なら
        AND     GR3,DC2         ;値から1を引きカウンタに1を加えてループ
        JNZ     NOT1
        SUBL    GR1,DC1
        JUMP    COUNTUP
NOT1    ADDL    GR1,DC1         ;その他(下2ビットが11)なら
COUNTUP LAD     GR2,1,GR2       ;値に1を加えカウンタに1を加えてループ
        JUMP    SOLVE

;テストルーチン
TEST    LAD     GR4,TESTDAT     ;GR4=データポインタ
TSTLOOP LD      GR1,0,GR4       ;データーを読み込む
        LAD     GR4,1,GR4       ;データポインタを進める
        JNZ     TESTNZ          ;データーが0ならば終了
        RET
TESTNZ  LD      GR2,DC0         ;カウンタを0にする
        CALL    SOLVE           ;解く
        CPL     GR0,0,GR4       ;答えと比較する
        LAD     GR4,1,GR4       ;データポインタを進める
        JNZ     MSGNG
        OUT     OKCHAR,DC1      ;正しければ'.'を表示する
        JUMP    TSTLOOP         ;次の問題へ
MSGNG   OUT     NGCHAR,DC1      ;間違っていたら'x'を表示する
        JUMP    TSTLOOP         ;次の問題へ
OKCHAR  DC      '.'
NGCHAR  DC      'x'
DC0     DC      0
DC1     DC      1
DC2     DC      2
DC3     DC      3

;テストデータ
TESTDAT DC      59,9
        DC      10,5
        DC      11,6
        DC      12,5
        DC      13,6
        DC      14,6
        DC      15,6
        DC      16,5
        DC      17,6
        DC      18,6
        DC      27,8
        DC      28,7
        DC      29,8
        DC      30,7
        DC      31,7
        DC      32,6
        DC      33,7
        DC      34,7
        DC      35,8
        DC      41,8
        DC      71,9
        DC      27307,23
        DC      43691,24
        DC      0
        END
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1