by Carl Burch, Hendrix College, Jan 2013
addi $s0, $zero, 1031 # $s0 is n, always 1031
addi $s1, $zero, 2 # $s1 is i, starting at 2
la $a1, is_composite
la $a2, is_prime
again: mult $s1, $s1 # if n < i * i, goto done with $a0=is_prime
mflo $t0
slt $t1, $s0, $t0
bne $t1, $zero, done
add $a0, $zero, $a2
div $s0, $s1 # if n % i == 0, goto done with $a0=is_composite
mfhi $t0
beq $t0, $zero, done
add $a0, $zero, $a1
j again # i++; repeat from again
addi $s1, $s1, 1
done: li $v0, 4 # print string in $a0
syscall
li $v0, 10 # exit from code
syscall
.data
is_prime: .asciiz "prime"
is_composite: .asciiz "composite"
la $a0, input # load user's string into 'input'
li $a1, 80
li $v0, 8
syscall
la $a0, input # call strlen(input)
jal strlen
nop
move $a0, $v0 # display result of strlen
li $v0, 1
syscall
li $v0, 10 # exit program
syscall
strlen: li $v0, -1 # $v0 has length - start at -1 because '\0' counted
slen_0: lb $t0, ($a0) # load current byte, move to next
addi $a0, $a0, 1
bne $t0, $zero, slen_0 # if current byte isn't '\0', repeat
addi $v0, $v0, 1 # but first increment result
jr $ra # return to caller
nop
.data
input: .space 80
lstsum: li $v0, 0 # $v0 will sum up entries
lsts_0: lw $t0, 0($a0) # load number in current node
lw $a0, 4($a0) # replace $a0 with next pointer
bne $a0, $zero, lsts_0 # repeat if next isn't NULL
add $v0, $v0, $t0 # but first add current num into $v0
jr $ra # return
nop