文字列「FizzBuzz」の長さ取得方法を変更 master
authorj8takagi <j8takagi@nifty.com>
Tue, 13 Nov 2012 01:45:42 +0000 (10:45 +0900)
committerj8takagi <j8takagi@nifty.com>
Tue, 13 Nov 2012 01:49:38 +0000 (10:49 +0900)
cnt/casl/fizzbuzz.casl

index 3e28fea..50e1ccd 100644 (file)
@@ -1,43 +1,46 @@
 MAIN    START
         RPUSH
 MAIN    START
         RPUSH
+        LD      GR1,FIZLEN      ; 文字列「FizzBuzz」の長さをFBLENへセット
+        ADDL    GR1,BUZLEN      ; ↓
+        ST      GR1,FBLEN       ; ↓
         LD      GR1,MIN         ; GR1:カウンター。初期値はMIN
         LD      GR2,MIN         ; GR2:Fizzカウンター。初期値はMIN
         LD      GR3,MIN         ; GR3:Buzzカウンター。初期値はMIN
         XOR     GR4,GR4         ; GR4:FizzBuzzフラグ。初期値は0
         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へジャンプ
+SETFIZ  CPL     GR2,FIZNUM      ; GR2 = FIZNUM:3 ではない場合、SETBUZへジャンプ
         JNZ     SETBUZ          ; ↓
         LAD     GR2,0           ; GR2 <- 0
         JNZ     SETBUZ          ; ↓
         LAD     GR2,0           ; GR2 <- 0
-SETBUZ  CPL     GR3,BUZNUM      ; GR3 = 5ではない場合、PUTFBへジャンプ
+SETBUZ  CPL     GR3,BUZNUM      ; GR3 = BUZNUM: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」を出力
         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へジャンプ
+        JUMP    LEND            ; LENDへジャンプ
 PUTFIZ  LD      GR2,GR2         ; GR2が0ではない場合、PUTBUZへジャンプ
         JNZ     PUTBUZ          ; ↓
         OUT     FIZZ,FIZLEN     ; 「Fizz」を出力
 PUTFIZ  LD      GR2,GR2         ; GR2が0ではない場合、PUTBUZへジャンプ
         JNZ     PUTBUZ          ; ↓
         OUT     FIZZ,FIZLEN     ; 「Fizz」を出力
-        JUMP    LOPEND          ; LOPENDへジャンプ
+        JUMP    LEND            ; LENDへジャンプ
 PUTBUZ  LD      GR3,GR3         ; GR3が0ではない場合、PUTNUMへジャンプ
         JNZ     PUTNUM          ; ↓
         OUT     BUZZ,BUZLEN     ; 「Buzz」を出力
 PUTBUZ  LD      GR3,GR3         ; GR3が0ではない場合、PUTNUMへジャンプ
         JNZ     PUTNUM          ; ↓
         OUT     BUZZ,BUZLEN     ; 「Buzz」を出力
-        JUMP    LOPEND          ; LOPENDへジャンプ
+        JUMP    LEND            ; LENDへジャンプ
 PUTNUM  CALL    OUTL            ; GR1の数値を表示
 PUTNUM  CALL    OUTL            ; GR1の数値を表示
-LOPEND  CPL     GR1,MAX         ; GR1とMAXを比較
-        JZE     FIN             ; GR1 = MAX の場合、FINへジャンプ
+LEND    CPL     GR1,MAX         ; GR1 = MAX の場合、FINへジャンプ
+        JZE     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
         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
+MIN     DC      1               ; 最小値。FIZNUMとBUZNUMより小さい数値でなければならない
+MAX     DC      100             ; 最大値。MIN以上65535以下
 FIZNUM  DC      3
 BUZNUM  DC      5
 FIZZ    DC      'Fizz'
 BUZZ    DC      'Buzz'
 FIZLEN  DC      4
 BUZLEN  DC      4
 FIZNUM  DC      3
 BUZNUM  DC      5
 FIZZ    DC      'Fizz'
 BUZZ    DC      'Buzz'
 FIZLEN  DC      4
 BUZLEN  DC      4
-FBLEN   DC      8
+FBLEN   DS      1