Using Mips implement a sorting function that makes use of recursion and FLU oper
ID: 3693524 • Letter: U
Question
Using Mips implement a sorting function that makes use of recursion and FLU operations. Implement a Function called quicksort that will sort a given array of floating point number in increasing order. The signature of the function should look like the following: void quicksort(float nums[], int first, int last) , where nums[] is the input array of single precision number, and first and last are both integers and represent the first and last indexes of the array, respectively.
The base address of the input array should be passed through register $a0, and the indexes through $a1, and $a2, respectively.
Your program should be able to read at least 10 floating point numbers from the console, store them in the array, sort them using the quick sort function that you have implemented and finally print them to screen with a print_arr function, that will take the base array as argument and its length, then print all the floating point numbers in that array to the screen.
Explanation / Answer
program :
.data
array: .word 4, 9, 12, -5, 2, 54, 8 , 1
line: .asciiz " "
.text
main:
addi $sp, $sp, -4
sw $ra, 0 ($sp)
la $a0, array
addi $a1, $zero, 0
addi $a2, $zero, 7
jal quicksort
addi $t0, $zero, 0
addi $t1, $zero, 8
la $t7, array
topprintloop:
beq $t0, $t1, endprintloop
sll $t3, $t0, 2
addi $t3, $t7, 0
lw $t4, 0($t3)
addi $v0, $zero, 1
addi $a0, $t4, 0
syscall
addi $v0, $zero, 4
la $a0, line
syscall
addi $t0, $t0, 1
j topprintloop
endprintloop:
lw $ra, 0 ($sp)
addi $sp, $sp, 4
jr $ra
quicksort:
addi $sp, $sp, -20
sw $ra, 0 ($sp)
sw $s0, 4 ($sp)
sw $s1, 8 ($sp)
sw $s2, 12 ($sp)
sw $s3, 16 ($sp)
addi $s0, $a0, 0
addi $s1, $a1, 0
addi $s2, $a2, 0
blt $s1, $s2, prep
j returnQuicksort
prep:
addi $a0, $s0, 0
addi $a1, $s1, 0
addi $a2, $s2, 0
jal partition
addi $s3, $v0, 0
addi $a0, $s0, 0
addi $a1, $s1, 0
addi $a2, $s3, -1
jal quicksort
addi $a0, $s0, 0
addi $a1, $s3, 1
addi $a2, $s2, 0
jal quicksort
returnQuicksort:
lw $ra, 0 ($sp)
lw $s0, 4 ($sp)
lw $s1, 8 ($sp)
lw $s2, 12 ($sp)
lw $s3, 16 ($sp)
addi $sp, $sp, 20
jr $ra
partition:
addi $sp, $sp, -28
sw $ra, 0 ($sp)
sw $s0, 4 ($sp)
sw $s1, 8 ($sp)
sw $s2, 12 ($sp)
sw $s3, 16 ($sp)
sw $s4, 20 ($sp)
sw $s5, 24 ($sp)
addi $s0, $a0, 0
addi $s1, $a1, 0
addi $s2, $a2, 0
sll $t0, $s2, 2
add $t1, $t0, $s0
lw $s3, 0($t1)
addi $s4, $s1, -1
addi $s5, $s1, 0
beginloop:
bge $s5, $s2, endloop
sll $t0, $s5, 2
add $t1, $t0, $s0
lw $s3, 0($t1)
sll $t2, $s5, 2
add $t2, $s0, $t2
lw $t2, 0($t2)
ble $t2, $s3, doloop
j loop
doloop:
sll $t0, $s5, 2
addi $t0, $s0, 0
lw $t1, 0($t0)
ble $t1, $s3, partitionswap
j loop
partitionswap:
addi $s4, $s4, 1
addi $a0, $s0, 0
addi $a1, $s4, 0
addi $a2, $s5, 0
jal swap # we swap
j loop
loop:
addi $s5, $s5, 1
j beginloop
endloop:
addi $t0, $s4, 1
addi $a0, $s0, 0
addi $a1, $t0, 0
addi $a2, $s2, 0
jal swap
addi $t0, $s4, 1
addi $v0, $t0, 0
lw $ra, 0 ($sp)
lw $s0, 4 ($sp)
lw $s1, 8 ($sp)
lw $s2, 12 ($sp)
lw $s3, 16 ($sp)
lw $s4, 20 ($sp)
lw $s5, 24 ($sp)
addi $sp, $sp, 28 # Push stack pointer
jr $ra
swap:
addi $sp, $sp, -28
sw $ra, 0 ($sp)
sw $s0, 4 ($sp)
sw $s1, 8 ($sp)
sw $s2, 12($sp)
sw $s3, 16($sp)
sw $s4, 20($sp)
sw $s5, 24($sp)
sll $s0, $a1, 2
sll $s1, $a2, 2
add $s2, $a0, $s0
add $s3, $a0, $s1
lw $s4, 0($s2)
lw $s5, 0($s3)
sw $s4, 0($s3)
sw $s5, 0($s2)
lw $ra, 0 ($sp)
lw $s0, 4 ($sp)
lw $s1, 8 ($sp)
lw $s2, 12($sp)
lw $s3, 16($sp)
lw $s4, 20($sp)
lw $s5, 24($sp)
addi $sp, $sp, 28
jr $ra
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.