Skip to content

Instantly share code, notes, and snippets.

@pazworld
Created August 27, 2013 01:55
Show Gist options
  • Save pazworld/6348836 to your computer and use it in GitHub Desktop.
Save pazworld/6348836 to your computer and use it in GitHub Desktop.
「増やす減らす二倍する」をCASL IIで(横へな13参考) ref: http://qiita.com/pazworld/items/c7e31e73af1ef33c5b4a
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment