75 lines
1.5 KiB
Plaintext
75 lines
1.5 KiB
Plaintext
#################################
|
|
# Fizz Buzz #
|
|
# MIPS Assembly targetings MARS #
|
|
# By Keith Stellyes #
|
|
# August 24, 2016 #
|
|
#################################
|
|
|
|
# $a0 left alone for printing
|
|
# $a1 stores our counter
|
|
# $a2 is 1 if not evenly divisible
|
|
|
|
.data
|
|
fizz: .asciiz "Fizz\n"
|
|
buzz: .asciiz "Buzz\n"
|
|
fizzbuzz: .asciiz "FizzBuzz\n"
|
|
newline: .asciiz "\n"
|
|
|
|
.text
|
|
loop:
|
|
beq $a1,100,exit
|
|
add $a1,$a1,1
|
|
|
|
#test for counter mod 15 ("FIZZBUZZ")
|
|
div $a2,$a1,15
|
|
mfhi $a2
|
|
bnez $a2,loop_not_fb #jump past the fizzbuzz print logic if NOT MOD 15
|
|
|
|
#### PRINT FIZZBUZZ: ####
|
|
li $v0,4 #set syscall arg to PRINT_STRING
|
|
la $a0,fizzbuzz #set the PRINT_STRING arg to fizzbuzz
|
|
syscall #call PRINT_STRING
|
|
j loop #return to start
|
|
#### END PRINT FIZZBUZZ ####
|
|
|
|
loop_not_fb:
|
|
div $a2,$a1,3 #divide $a1 (our counter) by 3 and store remainder in HI
|
|
mfhi $a2 #retrieve remainder (result of MOD)
|
|
bnez $a2, loop_not_f #jump past the fizz print logic if NOT MOD 3
|
|
|
|
#### PRINT FIZZ ####
|
|
li $v0,4
|
|
la $a0,fizz
|
|
syscall
|
|
j loop
|
|
#### END PRINT FIZZ ####
|
|
|
|
loop_not_f:
|
|
div $a2,$a1,5
|
|
mfhi $a2
|
|
bnez $a2,loop_not_b
|
|
|
|
#### PRINT BUZZ ####
|
|
li $v0,4
|
|
la $a0,buzz
|
|
syscall
|
|
j loop
|
|
#### END PRINT BUZZ ####
|
|
|
|
loop_not_b:
|
|
#### PRINT THE INTEGER ####
|
|
li $v0,1 #set syscall arg to PRINT_INTEGER
|
|
move $a0,$a1 #set PRINT_INTEGER arg to contents of $a1
|
|
syscall #call PRINT_INTEGER
|
|
|
|
### PRINT THE NEWLINE CHAR ###
|
|
li $v0,4 #set syscall arg to PRINT_STRING
|
|
la $a0,newline
|
|
syscall
|
|
|
|
j loop #return to beginning
|
|
|
|
exit:
|
|
li $v0,10
|
|
syscall
|