Advertisement
Guest User

FizzBuzz

a guest
Jun 18th, 2019
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.32 KB | None | 0 0
  1. ; FizzBuzz for 4Chan anons :)
  2. ;
  3.                 ;       R0 - Current number
  4.                 ;       R1 - Current number (copy)
  5.                 ;       R2 - Mod value
  6.                 ;       R3 - Mod sucess
  7.                 ;       R4 - Memory Address
  8.                 ;       R5 - Fizz
  9.                 ;       R6 - Buzz
  10.                 ;       R7 - Newline
  11.                 ;       R8 - Temp, used for moving data round
  12. char_F          EQU     0x46
  13. char_I          EQU     0x69
  14. char_Z          EQU     0x7A
  15. char_B          EQU     0x42
  16. char_U          EQU     0x75
  17. NEWLINE         EQU     0x0A
  18.                
  19. main
  20.                 ;       ----- SETUP REGISTERS ----- ;
  21.                
  22.                 ;       Stores the beginning address of the RAM in R4
  23.                 MOV     R4, #0x10000
  24.                
  25.                 ;       Store Fizz in R5
  26.                 MOV     R8, #char_F
  27.                 STRB    R8, [R4]
  28.                 MOV     R8, #char_I
  29.                 STRB    R8, [R4, #1]
  30.                 MOV     R8, #char_Z
  31.                 STRB    R8, [R4, #2]
  32.                 MOV     R8, #char_Z
  33.                 STRB    R8, [R4, #3]
  34.                 LDR     R5, [R4]
  35.                
  36.                 ;       Store Buzz in R6
  37.                 MOV     R8, #char_B
  38.                 STRB    R8, [R4]
  39.                 MOV     R8, #char_U
  40.                 STRB    R8, [R4, #1]
  41.                 LDR     R6, [R4]
  42.                
  43.                 ;       Store Newline in R7
  44.                 MOV     R7, #NEWLINE
  45.                
  46.                
  47.                 ;       Set up the FizzBuzz counter and run the loop
  48.                 MOV     R0, #100
  49.                 B       _fizzBuzzLoop
  50.                
  51.                
  52.                
  53. _mod_loop
  54.                 SUB     R1, R1, R2
  55.                 CMP     R1, #0
  56.                 BGT     _mod_loop           ; If we still have numbers left, keep looping
  57.                 BLT     _return_false       ; The mod flag will be false as R3 does not fit into R1
  58.                 MOV     R3, #1              ; Set the mod flag to true
  59.                
  60. _return_false
  61.                 MOV     PC, R14             ; Return to the branch link
  62.                
  63.                
  64.                
  65.                
  66.                
  67. _fizzBuzzLoop
  68.                 ;       Test FizzBuzz (%15)
  69.                 MOV     R1, R0
  70.                 MOV     R2, #15
  71.                 BL      _mod_loop
  72.                 CMP     R3, #1
  73.                 BEQ     _write_FizzBuzz
  74.                
  75.                 ;       Test Fizz (%5)
  76.                 MOV     R1, R0
  77.                 MOV     R2, #5
  78.                 BL      _mod_loop
  79.                 CMP     R3, #1
  80.                 BEQ     _write_Fizz
  81.                
  82.                 ;       Test Buzz (%3)
  83.                 MOV     R1, R0
  84.                 MOV     R2, #3
  85.                 BL      _mod_loop
  86.                 CMP     R3, #1
  87.                 BEQ     _write_Buzz
  88.                
  89.                 ;       All test failed, write the normal number
  90.                 STR     R0, [R4]
  91.                 B       _write_Newline
  92.                
  93.                
  94. _write_Fizz
  95.                 STR     R5, [R4]
  96.                 B       _write_Newline
  97. _write_Buzz
  98.                 STR     R6, [R4]
  99.                 B       _write_Newline
  100. _write_FizzBuzz
  101.                 STR     R5, [R4]
  102.                 ADD     R4, R4, #8
  103.                 STR     R6, [R4]
  104.                 ;       Fallthrough
  105. _write_Newline
  106.                 ADD     R4, R4, #8
  107.                 STRB    R7, [R4]
  108.                 ADD     R4, R4, #8
  109.                
  110.                 MOV     R3, #0      ; Reset the Mod register
  111.                 SUB     R0, R0, #1  ; Decrement R0
  112.                 CMP     R0, #0      ; Check if we are done
  113.                 BGT     _fizzBuzzLoop
  114.                
  115.                 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement