Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I have this merge-sort mips code but It only prints when the sort is done. I wan

ID: 3700206 • Letter: I

Question

I have this merge-sort mips code but It only prints when the sort is done. I want it to print the array each sort iteration.

Here is my Code:

.data
list: .space 100000 # original array of unsorted values
left: .space 100000 # temporary array to hold left half of main array
right: .space 100000 # temporary array to hold right half of main array
n: .word 0 # Holds the number of values to be sorted
arraySize: .word 0
arrayEndAddress:.word 0
prompt1: .asciiz "Enter n: "
prompt2: .asciiz "Enter element "
dialog1: .asciiz "The size of array entered is not power of 2!"
dialog2: .asciiz "The sorted list is: "
space: .asciiz " "
colon: .asciiz ": "
eol: .asciiz " "

.text
main:
la $a0, prompt1
li $v0, 4
syscall
  
li $v0, 5
syscall
sw $v0, n
  
lw $t1, n
sll $t1, $t1, 2
li $t2, 1
li $t0, 0
writeElements:
bge $t0, $t1, done
  
la $a0,prompt2
li $v0, 4
syscall
  
move $a0, $t2
li $v0, 1
syscall
add $t2, $t2, 1
  
la $a0,colon
li $v0, 4
syscall
  
li $v0, 5
syscall
  
sw $v0, list($t0)
add $t0, $t0, 4
  
j writeElements
done:
sw $t0, arrayEndAddress
la $t1, list
sub $t0, $t0, $t1
sw $t0, arraySize
jal mergesort
jal printArray
exit:
li $v0, 10
syscall
#################################################################################
# Function: Mergesort #
# Description: Splits the Array (or subarray) into smaller subarray #
# Receives: Nothing #
# Returns: Nothing #
mergesort: #
#################################################################################
add $sp, $sp, -4
sw $ra, 0($sp)
lw $t0, n
sub $t0, $t0, 1
li $t1, 1
for1:
li $t2, 0
li $t3, 0
li $t4, 0
for2:
addu $t3, $t2, $t1
sub $t3, $t3, 1
  
sll $t4, $t1, 1
addu $t4, $t4, $t2
sub $t4, $t4, 1
  
findmin:
blt $t4, $t0, setmin
move $t4, $t0
setmin: move $t4, $t4
  
jal merge
  
sll $t5, $t1, 1
addu $t2, $t2, $t5
blt $t2, $t0, for2
sll $t1, $t1, 1
ble $t1, $t0, for1
mergesortDone:
lw $ra, 0($sp)
add $sp, $sp, 4
jr $ra
  
########################################################################################################
# Function: Merge #
# Description: combines two subarrays into one sorted array and updates the original array #
# Receives: -$t2, $t3, $t #
# - $t2 has lower index of subarray #
# - $t3 has the middle index of the subarray #
# - $t4 has the index of the end of the subarray #
# Returns: Nothing #
merge: #
########################################################################################################
addi $sp, $sp, -20
sw $t0, 0($sp)
sw $t1, 4($sp)
sw $t2, 8($sp)
sw $t3, 12($sp)
sw $t4, 16($sp)
  
lw $s2, 8($sp)
lw $s3, 12($sp)
lw $s4, 16($sp)
  
addi $t0, $s3,1
sub $t0, $t0, $s2
sub $t1, $s4, $s3
  
li $t3, 0
li $t4, 0
for3: #copy left half of array
add $s5, $s2, $t3
sll $s5, $s5, 2
lw $t5, list($s5)
sll $s6, $t3, 2
sw $t5, left($s6)
  
addiu $t3, $t3, 1
sltu $t9,$t3, $t0
bne $t9, $0, for3
  
  
for4: #copy right half of the array
addi $s5, $s3,1
add $s5, $s5, $t4
sll $s5, $s5, 2

lw $t5, list($s5)
sll $s6, $t4, 2
  
sw $t5, right($s6)
addi $t4, $t4, 1
sltu $t9, $t4, $t1
bne $t9, $0, for4
  
li $t3, 0
li $t4, 0
move $s0, $s2
while1: #loop to sort the subarrays
slt $a2, $t3, $t0
slt $a3, $t4, $t1
and $v1,$a2, $a3
beqz $v1, while2
  
sll $s2, $t3, 2
lw $t5, left($s2)
  
sll $s3, $t4, 2
lw $t6, right($s3)
  
sll $s4, $s0, 2
if:
bgt $t5, $t6, else
sw $t5, list($s4)
addi $t3, $t3, 1
b loop
else:
sw $t6, list($s4)
addi $t4, $t4, 1
b loop
loop:
addi $s0, $s0, 1
j while1
while2: #copy the remaining values of the left subarray into the original array
bge $t3, $t0, while3
sll $s2, $t3, 2
lw $t5, left($s2)
sll $s4, $s0, 2
sw $t5, list($s4)
addi $t3, $t3, 1
addi $s0, $s0, 1
j while2
while3: #copy the remaining values of the right subarray into the original array
bge $t4, $t1, doneMerge
sll $s2, $t4, 2
lw $t5, right($s2)
sll $s4, $s0, 2
sw $t5, list($s4)
addi $t4, $t3, 1
addi $s0, $s0, 1
j while3
doneMerge:
lw $t2, 8($sp)
lw $t1, 4($sp)
lw $t0, 0($sp)
addi $sp, $sp, 20
jr $ra
  
########################################################################################################
# Function: printArray: #
# Description: Displays the sorted numbers on the screen #
# Receives: Nothing #
# Returns: Nothing #
printArray: #
########################################################################################################   
add $sp, $sp,-4
sw $ra, 0($sp)
la $a0, dialog2
li $v0, 4
syscall
  
li $t0, 0
lw $t1, n
loop1:
bge $t0, $t1, donePrint
sll $s0, $t0, 2
lw $a0, list($s0)
li $v0, 1
syscall
  
la $a0, space
li $v0, 4
syscall
  
add $t0, $t0, 1
j loop1
la $a0, eol
li $v0, 4
syscall
donePrint:
lw $ra, 0($sp)
jr $ra

For example, if the input array is 14 27 13 11 49 63 17 9. your program should output the following: Input Array 14 27 13 11 49 63 179 After first Iteration 14 27 11 13 49 63 9 17 After second iteration 11 13 14 27 9 1749 63 After third iteration 9 11 13 14 17 27 49 63

Explanation / Answer

PROGRAM:

main :

li $v0, 5          

syscall

move $t4, $v0          

li $v0, 5          

syscall

move $t5, $v0          

li $v0, 5          

syscall

move $t6, $v0          

li $v0, 5   

syscall

move $t7, $v0

la $t0 , Array1

sw $t4 , 0($t0)

sw $t5 , 4($t0)

sw $t6 , 8($t0)

sw $t7 , 12($t0)

la $t1 , Array2

li $t2 , 4

sw $t0, -12($sp)

sw $t1, -8($sp)

sw $t2, -4($sp)

addi $sp, $sp, -184

jal sort

li $v0, 10

syscall

sort:

sw $ra, 168($sp)

lw $t2 , 180($sp)     

srl $t0 , $t2 , 1      

sra $t0 , $t2 , 1  

sub $t1 , $t2 , $t0    

sw $t1 , 164($sp)      

sw $t0 , 160($sp)      

#la $t0 , Array1           

#la $t1 , Array2   

#sw $t1 , 80($sp)      

#sw $t0 , 0($sp)       

li $t0 , 1

bne $t0 , $t2 , firstL

lw $t1 , 172($sp)

lw $t1 , 0($t1)  

lw $t2 , 176($sp)

sw $t1 , 0($t2)  

#sw $t2 , 176($sp)

jr $ra

firstL :

lw $t8, 172($sp)           

sw $t8, -12($sp)           

add $t8, $sp, $zero         

sw $t8, -8($sp)            

lw $t8, 160($sp)           

sw $t8, -4($sp)

addi $sp, $sp, -184        

jal

lw $t8, 172($sp)  

lw $t7, 160($sp)  

sll $t7 , $t7 , 2

add $t8 , $t8 , $t7

sw $t8, -12($sp)

addi $t8, $sp, 80

sw $t8, -8($sp)

lw $t8, 164($sp)

sw $t8, -4($sp)

addi $sp, $sp, -184

jal sort

add $a0, $sp, $zero

addi $a1, $sp, 80

lw $a2, 176($sp)

lw $t8, 160($sp)   

sw $t8, -8($sp)

lw $t8, 164($sp)

sw $t8, -4($sp)

addi $sp, $sp, -12

jal merge

lw $ra, 168($sp)

lw $t0 , 176($sp)

lw $t1 , 0($t0)

lw $t2 , 4($t0)

lw $t3 , 8($t0)

lw $t4 , 12($t0)

li $v0, 1       

    move $a0, $t1

    syscall

li $v0, 1          

    move $a0, $t2  

    syscall

li $v0, 1          

    move $a0, $t3  

    syscall

li $v0, 1          

    move $a0, $t4  

    syscall

addi $sp , $sp , 184

jr $ra

merge:

sw $ra, 0($sp)    

lw $s1 , 4($sp)

lw $s2 , 8($sp)

move $t0 , $zero    

move $t1 , $zero

move $t2 , $zero

While1:

sll $t3 , $t0 , 2

add $t3 , $t3 , $a0

sll $t4 , $t1 , 2

add $t4 , $t4 , $a1

lw $t5 , 0($t3)     

lw $t6 , 0($t4)     

sll $t7 , $t2 , 2

add $t7 , $t7 , $a2   

bge $t0 , $s1 , While2

bge $t1 , $s2 , While2

bge $t5 , $t6 , While12

sw $t5 , 0($t7)  

addi $t0 , $t0 , 1

addi $t2 , $t2 , 1

j While1

While12:

sw $t6 , 0($t7)   

addi $t1 , $t1 , 1

addi $t2 , $t2 , 1

j While1

While2:

bge $t0 , $s1 , While3

sw $t5 , 0($t7)  

addi $t0 , $t0 , 1

addi $t2 , $t2 , 1

j While1

While3:

bge $t1 , $s2 , Exit

sw $t6 , 0($t7)  

addi $t1 , $t1 , 1   

addi $t2 , $t2 , 1

j While1

Exit :

lw $ra, 0($sp)

addi $sp, $sp, 12

jr $ra