## Subroutine that finds largest unsigned number, smallest signed number in ## array of words # Address passed in $a0, # of elements in $a1 # assumes count is non zero .data array: .word -8000, -765, -1, -5, -34000,-40 msg1: .asciiz "Smallest unsigned: \n " msg2: .asciiz "\nLargest signed: \n " .text main: la $a0, array ori $a1, $zero, 6 jalr t1ec or $s0, $zero, $v0 # save smallest unsigned (should be -34000) or $s1, $zero, $v1 # save largest signed (should be equal to -1) addiu $v0, $0, 4 la $a0 msg1 syscall addiu $v0, $zero, 1 or $a0, $zero,$s0 syscall addiu $v0, $0, 4 la $a0 msg2 syscall addiu $v0, $zero, 1 or $a0, $zero,$s1 syscall #exit addiu $v0 $0 10 syscall # syscall 10 (exit) t1ec: or $t3, $a0, $zero # t3 will contain address offset or $t4, $a1, $zero # t4 will contain count value lw $v0, 0($t3) # get first value or $v1, $v0, $zero # into both $v0, $v1 loop: lw $t2, 0($t3) # read value from array slt $t0, $v1, $t2 # is new value > old largest value? beq $zero,$t0, skip or $v1, $t2, $zero # save new largest signed value skip: sltu $t0, $t2, $v0 # is new value < old smallest value? beq $zero,$t0, skip2 or $v0, $t2, $zero # save new smallest unsiged value skip2: addi $t3,$t3, 4 # point at next array value addi $t4,$t4, -1 # subtract one bne $zero $t4, loop # get next value jr $ra # exit, $a0, $a1 preserved, only temp registers used