X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=casl%2Ffizzbuzz.casl;fp=casl%2Ffizzbuzz.casl;h=3866614c93003b1a575d76c9ea30e8aa6476f4a8;hb=141084631a1fe756928bca2adb4b79e77cef9875;hp=fff05f07fa2bb7196f3a8b50d55de90269e23a09;hpb=6f09ae747aabf4d4f6bbad3ac047f907ba7044d8;p=fizzbuzz.git diff --git a/casl/fizzbuzz.casl b/casl/fizzbuzz.casl index fff05f0..3866614 100644 --- a/casl/fizzbuzz.casl +++ b/casl/fizzbuzz.casl @@ -2,9 +2,9 @@ MAIN START RPUSH LD GR1,MIN ; GR1にMINを代入 LOOP CALL FIZBUZ ; FIZBUZを呼び出す - LAD GR1,1,GR1 ; GR1 <- GR1 + 1 CPL GR1,MAX ; GR1とMAXを比較 - JPL FIN ; GR1 > MAX の場合、FINへジャンプ + JZE FIN ; GR1 = MAX の場合、FINへジャンプ + LAD GR1,1,GR1 ; GR1 <- GR1 + 1 JUMP LOOP ; LOOPへジャンプ FIN RPOP RET @@ -21,30 +21,24 @@ FIZBUZ START XOR GR4,GR4 ; GR4: 文字列「Fizz」の長さおよびフラグ XOR GR5,GR5 ; GR5: 文字列「Buzz」の長さおよびフラグ XOR GR6,GR6 ; GR6: 文字列「FizzBuzz」のフラグ -GETFIZ LD GR2,FIZNUM ; GR2にFIZNUM=3を代入 + LD GR2,FIZNUM ; GR2にFIZNUM=3を代入 CALL DIVL ; GR3 <- GR1 % 3(= GR2) - LD GR3,GR3 ; GR3のフラグ値を取得 - JNZ GETBUZ ; GR3が0でない場合、FIZNUMの倍数ではないので、GETBUZへジャンプ - LD GR4,FIZLEN ; GR4に文字列「Fizz」の長さFIZLEN=4を代入 -GETBUZ LD GR2,BUZNUM ; GR2にBUZNUM=5を代入 + LD GR4,GR3 ; GR4 <- GR3 + LD GR2,BUZNUM ; GR2にBUZNUM=5を代入 CALL DIVL ; GR3 <- GR1 % 5(= GR2) - LD GR3,GR3 ; GR3のフラグ値を取得 - JNZ PUTS ; GR3が0でない場合、BIZNUMの倍数ではないので、PUTSへジャンプ - LD GR5,BUZLEN ; GR4のフラグ値を取得 -PUTS LD GR6,GR4 ; GR6 <- GR4 - AND GR6,GR5 ; GR6 <- GR6 and GR4 - JZE CHKFIZ ; GR6が0の場合、GR4かGR5のどちらかが0なので、CHKFIZへジャンプ - ADDL GR4,GR5 ; GR4 <- GR4 + GR5 - JUMP PUTFIZ ; 「FizzBuzz」を出力するため、PUTFIZへジャンプ -CHKFIZ LD GR4,GR4 ; GR4のフラグ値を取得 - JZE CHKBUZ ; GR4が0の場合、CHKBUZへジャンプ -PUTFIZ ST GR4,LEN ; LEN <- GR4 - OUT FIZZ,LEN ;「Fizz」または「FizzBuzz」を出力 + LD GR5,GR3 ; GR5 <- GR3 + LD GR6,GR4 ; GR6 <- GR4 or GR5 + OR GR6,GR5 ; ↓ + JNZ PUTFIZ ; GR6が0以外の場合、GR4かGR5のどちらかが0以外なので、PUTFIZへジャンプ + OUT FIZZ,FBLEN ; 「FizzBuzz」を出力 + JUMP FIN ; 「FizzBuzz」を出力するため、PUTFIZへジャンプ +PUTFIZ LD GR4,GR4 ; GR4のフラグ値を取得 + JNZ PUTBUZ ; GR4が0以外の場合、PUTBUZへジャンプ + OUT FIZZ,FIZLEN ;「Fizz」を出力 JUMP FIN ; FINへジャンプ -CHKBUZ LD GR5,GR5 ; GR5のフラグ値を取得 - JZE PUTNUM ; GR5が0の場合、PUTNUMへジャンプ -PUTBUZ ST GR5,LEN ; LEN <- GR4 - OUT BUZZ,LEN ;「Buzz」を出力 +PUTBUZ LD GR5,GR5 ; GR5が0以外の場合、PUTNUMへジャンプ + JNZ PUTNUM ; ↓ + OUT BUZZ,BUZLEN ;「Buzz」を出力 JUMP FIN ; FINへジャンプ PUTNUM CALL OUTL ; GR1の数値を表示 FIN RPOP @@ -55,4 +49,4 @@ FIZZ DC 'Fizz' BUZZ DC 'Buzz' FIZLEN DC 4 BUZLEN DC 4 -LEN DS 1 +FBLEN DC 8