Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Daniel Zahn 11523337
- #ECE484 Lab 2
- #s0 = list size
- #s1 = list index
- #s4 = min
- #s5 = max
- main:
- beq $s0, $zero, finish
- add $a0, $s0, $zero
- add $a1, $s1, $zero
- jal findMinMax
- add $s4, $v0, $zero
- add $s5, $v1, $zero
- j finish
- #In subroutine:
- #s2 = min
- #s3 = max
- #s4 = index
- findMinMax:
- addi $sp, $sp, -4 #pushing $s0 through $s5
- sw $s0, 0($sp)
- addi $sp, $sp, -4
- sw $s1, 0($sp)
- addi $sp, $sp, -4
- sw $s2, 0($sp)
- addi $sp, $sp, -4
- sw $s3, 0($sp)
- addi $sp, $sp, -4
- sw $s4, 0($sp)
- add $s4, $zero, $zero #initializing vars, i = 0
- add $a0, $s0, $zero #s0 = size
- add $a1, $s1, $zero #s1 = list pointer
- lw $s2, 0($s1) #min = start of list
- lw $s3, 0($s1) #max = start of lsit
- while:
- slt $t0, $s4, $s0 #Checks if $s2 (index) < $s0 (size)
- beq $t0, $zero, end_while #If $t0 = 0 ($s2 is too big), end
- lw $t1, 0($s1) #Load the value of $s1 into $t1
- check_max:
- slt,$t0, $s3, $t1 #Checks if $s5 (current max) < $t1 (index value)
- beq $t0, $zero, check_min #If $s5 is larger ($t0 = 0) go to check min
- add $s3, $t1, $zero #Else, make $t1 the new current max
- check_min:
- slt,$t0, $t1, $s2 #Checks if $t1 (index value) < $s4 (current min)
- beq $t0, $zero, hop_next #If $t1 is larger ($t0 = 0) go to hop_next
- add $s2, $t1, $zero #Else, make $t1 the new current min
- hop_next:
- addi $s1, $s1, 4 #Increment index
- addi $s4, $s4, 1 #increment pointer forwards
- j while
- end_while:
- add $v0, $s2, $zero #set return values
- add $v1, $s3, $zero
- lw $s4, 0($sp) #popping s0 thru s4
- addi $sp, $sp, 4
- lw $s3, 0($sp)
- addi $sp, $sp, 4
- lw $s2, 0($sp)
- addi $sp, $sp, 4
- lw $s1, 0($sp)
- addi $sp, $sp, 4
- lw $s0, 0($sp)
- addi $sp, $sp, 4
- jr $ra
- finish:
- addi $v0, $zero, 10
- #jr $ra #prevents spim from throwing memory error
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement