FizzBuzz in 68k Assembly
Written on
November
26th,
2012
by
Cody Snider
Fizz buzz is a group word game for children to teach them about division. Players take turns to count incrementally, replacing any number divisible by three with the word “fizz”, and any number divisible by five with the word “buzz”.
```assembly
ORG $1000
FIZZ DC.B 'FIZZ',$0D,$0A,0
BUZZ DC.B 'BUZZ',$0D,$0A,0
FBUZZ DC.B 'FIZZBUZZ',$0D,$0A,0
CRLF DC.B $0D,$0A,0
START
MOVEQ #0, D1 ; Rolling value
MOVEQ #10, D2 ; Set D2 with dec number 10
BSR LOOP ; Branch to loop
QUIT MOVE.B #9, D0 ; Moves the dec number 9 into data register D0
TRAP #15 ; Execute trap command in D0
DBUZZ LEA BUZZ, A1 ; Load BUZZ address into address register A1
MOVE.B #14, D0 ; Set trap command to display NULL terminated string in A1
TRAP #15 ; Execute trap command
BRA LOOP ; Branch to LOOP
DFIZZ LEA FIZZ, A1 ; Load FIZZ address into address register A1
MOVE.B #14, D0 ; Set trap command to display NULL terminated string in A1
TRAP #15 ; Execute trap command
BRA LOOP ; Branch to LOOP
DFBUZZ LEA FBUZZ, A1 ; Load FBUZZ address into address register A1
MOVE.B #14, D0 ; Set trap command to display NULL terminated string in A1
TRAP #15 ; Execute trap command
BRA LOOP ; Branch to LOOP
DVAL MOVEQ #15, D0 ; Set trap command to display D1
TRAP #15 ; Execute trap command
LEA CRLF, A1 ; Load FBUZZ address into address register A1
MOVE.B #14, D0 ; Set trap command to display NULL terminated string in A1
TRAP #15 ; Execute trap command
BRA LOOP ; Branch to LOOP
LOOP CMP #100, D1 ; Compare D1 to 100
BEQ QUIT ; Equality in previous compare meets break condition
ADDQ #1, D1 ; Increment loop
MOVE.L D1, D3 ; Store D1 to D3 for DIV
DIVU #15, D3 ; D3 / 15
SWAP D3 ; Swap D3 remainder byte
CMP #0, D3 ; Evaluate D3 for 0
BEQ DFBUZZ ; Run subroutine to display 'FIZZBUZZ'
MOVE.L D1, D3 ; Store D1 to D3 for DIV
DIVU #3, D3 ; D3 / 3
SWAP D3 ; Swap D3 remainder byte
CMP #0, D3 ; Evaluate D3 for 0
BEQ DFIZZ ; Run subroutine to display 'FIZZ'
MOVE.L D1, D3 ; Store D1 to D3 for DIV
DIVU #5, D3 ; D3 / 5
SWAP D3 ; Swap D3 remainder byte
CMP #0, D3 ; Evaluate D3 for 0
BEQ DBUZZ ; Run subroutine to display 'BUZZ'
BRA DVAL ; Other conditions not met, branch into DVAL
END START
```