# multiples.asm takes two numbers A and B, and prints out
# all the multiples of A from A to A * B.
# If B <= 0, then no multiples are printed.
# Registers used:
# $t0 used to hold A.
# $t1 used to hold B.
# $t2 used to store S, the sentinel value A * B.
# $t3 used to store m, the current multiple of A.
.text
.globl __start
__start:
## read A into $t0, B into $t1
li $v0, 5
syscall
move $t0, $v0
li $v0, 5
syscall
move $t1, $v0
blez $t1, exit # if B <= 0, exit.
mul $t2, $t0, $t1 # S = A * B.
move $t3, $t0 # m = A
## print out $t3
loop: move $a0, $t3
li $v0, 1
syscall
beq $t2, $t3, endloop # if m == S, we're done.
add $t3, $t3, $t0 # otherwise, m = m + A.
## print a space
# Try lw first -- what happens and why does it crash?
# lw $a0, space
la $a0, space
li $v0, 4
syscall
b loop
endloop:
## exit
exit: li $v0, 10
syscall
.data
space: .asciiz " "
# end of multiples.asm