Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; FizzBuzz for 4Chan anons :)
- ;
- ; R0 - Current number
- ; R1 - Current number (copy)
- ; R2 - Mod value
- ; R3 - Mod sucess
- ; R4 - Memory Address
- ; R5 - Fizz
- ; R6 - Buzz
- ; R7 - Newline
- ; R8 - Temp, used for moving data round
- char_F EQU 0x46
- char_I EQU 0x69
- char_Z EQU 0x7A
- char_B EQU 0x42
- char_U EQU 0x75
- NEWLINE EQU 0x0A
- main
- ; ----- SETUP REGISTERS ----- ;
- ; Stores the beginning address of the RAM in R4
- MOV R4, #0x10000
- ; Store Fizz in R5
- MOV R8, #char_F
- STRB R8, [R4]
- MOV R8, #char_I
- STRB R8, [R4, #1]
- MOV R8, #char_Z
- STRB R8, [R4, #2]
- MOV R8, #char_Z
- STRB R8, [R4, #3]
- LDR R5, [R4]
- ; Store Buzz in R6
- MOV R8, #char_B
- STRB R8, [R4]
- MOV R8, #char_U
- STRB R8, [R4, #1]
- LDR R6, [R4]
- ; Store Newline in R7
- MOV R7, #NEWLINE
- ; Set up the FizzBuzz counter and run the loop
- MOV R0, #100
- B _fizzBuzzLoop
- _mod_loop
- SUB R1, R1, R2
- CMP R1, #0
- BGT _mod_loop ; If we still have numbers left, keep looping
- BLT _return_false ; The mod flag will be false as R3 does not fit into R1
- MOV R3, #1 ; Set the mod flag to true
- _return_false
- MOV PC, R14 ; Return to the branch link
- _fizzBuzzLoop
- ; Test FizzBuzz (%15)
- MOV R1, R0
- MOV R2, #15
- BL _mod_loop
- CMP R3, #1
- BEQ _write_FizzBuzz
- ; Test Fizz (%5)
- MOV R1, R0
- MOV R2, #5
- BL _mod_loop
- CMP R3, #1
- BEQ _write_Fizz
- ; Test Buzz (%3)
- MOV R1, R0
- MOV R2, #3
- BL _mod_loop
- CMP R3, #1
- BEQ _write_Buzz
- ; All test failed, write the normal number
- STR R0, [R4]
- B _write_Newline
- _write_Fizz
- STR R5, [R4]
- B _write_Newline
- _write_Buzz
- STR R6, [R4]
- B _write_Newline
- _write_FizzBuzz
- STR R5, [R4]
- ADD R4, R4, #8
- STR R6, [R4]
- ; Fallthrough
- _write_Newline
- ADD R4, R4, #8
- STRB R7, [R4]
- ADD R4, R4, #8
- MOV R3, #0 ; Reset the Mod register
- SUB R0, R0, #1 ; Decrement R0
- CMP R0, #0 ; Check if we are done
- BGT _fizzBuzzLoop
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement