X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cnt%2Fcasl%2Ffizzbuzz.casl;fp=cnt%2Fcasl%2Ffizzbuzz.casl;h=3e28fea18e9f3acb16a1a873fc41fd34a4d9d4e5;hb=5a301513888b0d0116ad78631855ed613028c5b2;hp=0000000000000000000000000000000000000000;hpb=c528e6ef5501de3c46f84fc14a6b8f0b2f3a13f4;p=fizzbuzz.git diff --git a/cnt/casl/fizzbuzz.casl b/cnt/casl/fizzbuzz.casl new file mode 100644 index 0000000..3e28fea --- /dev/null +++ b/cnt/casl/fizzbuzz.casl @@ -0,0 +1,43 @@ +MAIN START + RPUSH + LD GR1,MIN ; GR1:カウンター。初期値はMIN + LD GR2,MIN ; GR2:Fizzカウンター。初期値はMIN + LD GR3,MIN ; GR3:Buzzカウンター。初期値はMIN + XOR GR4,GR4 ; GR4:FizzBuzzフラグ。初期値は0 +SETFIZ CPL GR2,FIZNUM ; GR2 = 3ではない場合、SETBUZへジャンプ + JNZ SETBUZ ; ↓ + LAD GR2,0 ; GR2 <- 0 +SETBUZ CPL GR3,BUZNUM ; GR3 = 5ではない場合、PUTFBへジャンプ + JNZ PUTFB ; ↓ + LAD GR3,0 ; GR3 <- 0 +PUTFB LD GR4,GR2 ; GR4 <- GR2 or GR3 + OR GR4,GR3 ; ↓ + JNZ PUTFIZ ; GR4が0ではない場合、GR2とGR4のどちらかが0ではないので、PUTFIZへジャンプ + OUT FIZZ,FBLEN ; 「FizzBuzz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTFIZ LD GR2,GR2 ; GR2が0ではない場合、PUTBUZへジャンプ + JNZ PUTBUZ ; ↓ + OUT FIZZ,FIZLEN ; 「Fizz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTBUZ LD GR3,GR3 ; GR3が0ではない場合、PUTNUMへジャンプ + JNZ PUTNUM ; ↓ + OUT BUZZ,BUZLEN ; 「Buzz」を出力 + JUMP LOPEND ; LOPENDへジャンプ +PUTNUM CALL OUTL ; GR1の数値を表示 +LOPEND CPL GR1,MAX ; GR1とMAXを比較 + JZE FIN ; GR1 = MAX の場合、FINへジャンプ + LAD GR1,1,GR1 ; GR1 <- GR1 + 1 + LAD GR2,1,GR2 ; GR2 <- GR2 + 1 + LAD GR3,1,GR3 ; GR3 <- GR3 + 1 + JUMP SETFIZ ; SETFIZへジャンプ +FIN RPOP + RET +MIN DC 1 ; FIZZNUMとBUZNUMより小さい数値でなければならない +MAX DC 100 +FIZNUM DC 3 +BUZNUM DC 5 +FIZZ DC 'Fizz' +BUZZ DC 'Buzz' +FIZLEN DC 4 +BUZLEN DC 4 +FBLEN DC 8