講師「きょうはFizzBuzzを書いてみよう これは基本中の基本だからね」
生徒「
ORG $0000
START:
LODI,r1 1
MAINLOOP:
LODZ r1
LODI,r3 15
BSTA,un MOD
COMZ r0
BCTR,eq OUT_FIZZBUZZ
LODZ r1
LODI,r3 3
BSTA,un MOD
COMZ r0
BCTR,eq OUT_FIZZ
LODZ r1
LODI,r3 5
BSTA,un MOD
COMZ r0
BCTR,eq OUT_BUZZ
LODZ r1
BSTA,un PRINTNUM
BCTR,un NEXTITER
OUT_FIZZBUZZ:
LODR,r0 ADDR_FIZZ
BSTA,un PRINTSTR
LODR,r0 ADDR_BUZZ
BSTA,un PRINTSTR
BCTR,un NEXTITER
OUT_FIZZ:
LODR,r0 ADDR_FIZZ
BSTA,un PRINTSTR
BCTR,un NEXTITER
OUT_BUZZ:
LODR,r0 ADDR_BUZZ
BSTA,un PRINTSTR
NEXTITER:
LODI,r0 $0A
BSTA,un PUTCHAR
ADDI,r1 1
COMI,r1 101
BCFR,eq MAINLOOP
HALT
MOD:
MOD_LOOP:
SUBZ r3
BCFA,lt MOD_LOOP
ADDZ r3
RETC,un
PRINTNUM:
STRA,r1 TEMP_R1
LODZ r0
STRZ r1
COMI,r0 100
BCFR,lt PN_TENS
LODI,r3 100
LODI,r2 0
PN_100LP:
SUBZ r3
BCFR,lt PN_100DN
ADDI,r2 1
BCTR,un PN_100LP
PN_100DN:
ADDZ r3
STRA,r0 TEMP_R0
ADDI,r2 '0'
LODZ r2
BSTA,un PUTCHAR
LODA,r0 TEMP_R0
PN_TENS:
LODA,r2 TEMP_R1
COMI,r2 100
STRA,r2 TEMP_HUND
COMI,r0 10
BCFR,lt PN_ONES
LODI,r3 10
LODI,r2 0
PN_10LP:
SUBZ r3
BCFR,lt PN_10DN
ADDI,r2 1
BCTR,un PN_10LP
PN_10DN:
ADDZ r3
STRA,r0 TEMP_R0
ADDI,r2 '0'
LODZ r2
BSTA,un PUTCHAR
LODA,r0 TEMP_R0
PN_ONES:
ADDI,r0 '0'
BSTA,un PUTCHAR
LODA,r1 TEMP_R1
RETC,un
PRINTSTR:
STRA,r1 TEMP_R1
STRZ r1
PS_LOOP:
LODZ r1
STRA,r0 STRPTR
LODA,r0 *STRPTR
COMZ r0
BCTR,eq PS_DONE
BSTA,un PUTCHAR
ADDI,r1 1
BCTR,un PS_LOOP
PS_DONE:
LODA,r1 TEMP_R1
RETC,un
PUTCHAR:
STRA,r0 $7F00
RETC,un
STR_FIZZ:
DATA 'F'
DATA 'i'
DATA 'z'
DATA 'z'
DATA 0
STR_BUZZ:
DATA 'B'
DATA 'u'
DATA 'z'
DATA 'z'
DATA 0
ADDR_FIZZ:
DATA STR_FIZZ
ADDR_BUZZ:
DATA STR_BUZZ
TEMP_R0:
DATA 0
TEMP_R1:
DATA 0
TEMP_HUND:
DATA 0
STRPTR:
DATA 0
DATA 0
END START