--- /dev/null
+CC ?= gcc
+CFLAGS ?= -g -Wall -Wextra
+RMF ?= rm -f
+
+COMMONSRC := word.c cmem.c cerr.c
+CASL2SRC := struct.c hash.c
+ASSRC := assemble.c token.c label.c
+EXECSRC := exec.c dump.c
+
+.PHONY: clean
+
+fizzubzz: fizzbuzz.c
+ $(CC) $(CFLAGS) -o fizzbuzz $^
+
+clean:
+ @$(RMF) fizzbuzz
--- /dev/null
+#include <stdio.h>
+
+void puts_fizzbuzz(int n)
+{
+ int fizz, buzz;
+
+ if ((fizz = (n % 3 == 0))) {
+ printf("Fizz");
+ }
+ if ((buzz = (n % 5 == 0))) {
+ printf("Buzz");
+ }
+ if (!fizz && !buzz) {
+ printf("%d", n);
+ }
+ printf("\n");
+}
+
+int main()
+{
+ static int max = 100, min = 1;
+ int i;
+
+ for(i = min; i <= max; i++) {
+ puts_fizzbuzz(i);
+ }
+ return 0;
+}
--- /dev/null
+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へジャンプ
+ JUMP LOOP ; LOOPへジャンプ
+FIN RPOP
+ RET
+MIN DC 1
+MAX DC 100
+
+;; GR1の値に応じて次を出力
+;; 3の倍数: Fizz
+;; 5の倍数: Buzz
+;; 3の倍数かつ5の倍数: FizzBuzz
+;; それ以外の数: 数値
+FIZBUZ START
+ RPUSH
+ XOR GR4,GR4 ; GR4: 文字列の長さおよびフラグ
+CHKFIZ LAD GR2,3 ; GR2に3を代入
+ CALL DIVL ; GR3 <- GR1 % GR2:3
+ LD GR3,GR3 ; GR3のフラグ値を取得
+ JNZ CHKBUZ ; GR3が0でない場合、3の倍数ではないので、CHKBUZへジャンプ
+SETFIZ LAD GR4,4 ; GR4に文字列「Fizz」の長さ4を代入
+CHKBUZ LAD GR2,5 ; GR2に5を代入
+ CALL DIVL ; GR3 <- GR1 % GR2:5
+ LD GR3,GR3 ; GR3のフラグ値を取得
+ JZE SETBUZ ; GR3が0の場合、5の倍数なので、SETBUZへジャンプ
+ LD GR4,GR4 ; GR4のフラグ値を取得
+ JZE PUTNUM ; GR4が0の場合、3の倍数でも5の倍数でもないので、PUTNUMへジャンプ
+ JUMP SETLEN ; SETLENへジャンプ(3の倍数で5の倍数ではない)
+SETBUZ LD GR4,GR4 ; GR4のフラグ値を取得
+ LAD GR4,4,GR4 ; GR4に文字列「Buzz」の長さ4を追加
+SETLEN ST GR4,LEN ; LENにGR4の値を出力
+CHKFB JZE PUTBUZ ; GR4が0の場合、3の倍数ではないので、PUTBUZへジャンプ
+PUTFIZ OUT FIZZ,LEN ; 「Fizz」または「FizzBuzz」を出力
+ JUMP FIN ; FINへジャンプ
+PUTBUZ OUT BUZZ,LEN ; 「Buzz」を出力
+ JUMP FIN ; FINへジャンプ
+PUTNUM CALL OUTA ; GR1の数値を表示
+FIN RPOP
+ RET
+FIZZ DC 'Fizz'
+BUZZ DC 'Buzz'
+LEN DS 1
--- /dev/null
+min = 1;
+max = 100;
+
+for(i = min; i <= max; i++) {
+ fizzbuzz_puts(i);
+}
+
+function fizzbuzz_puts(n) {
+ if (fizz = (n % 3 == 0)) {
+ document.write("Fizz");
+ }
+ if (buzz = (n % 5 == 0)) {
+ document.write("Buzz");
+ }
+ if (!fizz && !buzz) {
+ document.write(n);
+ }
+ document.write("<br />\n");
+}