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