Created
August 27, 2013 01:55
-
-
Save pazworld/6348836 to your computer and use it in GitHub Desktop.
「増やす減らす二倍する」をCASL IIで(横へな13参考) ref: http://qiita.com/pazworld/items/c7e31e73af1ef33c5b4a
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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