# Programmer: Mark Fienup # MIPS Insertion sort of an array. # Selection sort High-Level Algorithm # integer firstUnsortedIndex, testIndex, elementToInsert; # # for firstUnsortedIndex = 1 to (length-1) do # testIndex = firstUnsortedIndex-1; # elementToInsert = numbers[firstUnsortedIndex]; # while (testIndex >=0) AND (numbers[testIndex] > elementToInsert ) do # numbers[ testIndex + 1 ] = numbers[ testIndex ]; # testIndex = testIndex - 1; # end while # numbers[ testIndex + 1 ] = elementToInsert; # end for .data numbers: .word 20, 30, 10, 40, 50, 60, 30, 25, 10, 5 length: .word 10 .text .globl main main: # Register usage: Since I'm not calling an subprograms, I don't # really need to follow and register convensions, but I'll try to # use only temporary register ($t#). This would make it easier to # convert to a subprogram later. # $t0 = firstUnsortedIndex # $t1 = testIndex # $t2 = elementToInsert # $t3 = base address of numbers # $t4 = address of element numbers[] # $t5 = value of numbers[testIndex] # $t6 = value of (length-1) lw $t6, length addi $t6, $t6, -1 la $t3, numbers for: li $t0, 1 forCompare: bgt $t0, $t6, end_for sub $t1, $t0, 1 mul $t4, $t0, 4 add $t4, $t4, $t3 lw $t2, 0($t4) while: blt $t1, 0, end_while mul $t4, $t1, 4 add $t4, $t4, $t3 lw $t5, 0($t4) ble $t5, $t2, end_while sw $t5, 4($t4) sub $t1, $t1, 1 j while end_while: mul $t4, $t1, 4 add $t4, $t4, $t3 sw $t2, 4($t4) addi $t0, $t0, 1 j forCompare end_for: li $v0, 10 # exit system call syscall endMain: