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

I am to write a program in MIPS assembly language that implements the bubble sor

ID: 3628483 • Letter: I

Question

I am to write a program in MIPS assembly language that implements the bubble sort algorithm to sort a variable sized array of signed 32-bit integers (words) that are read from the console.
A “special value” 9999 will be used to signify the end of the input sequence but this value is not to be considered part of the input data set.
*What will be valid:
-any value greater than 9999 that is entered prior to 9999 is considered as a valid input.
-Zero and negative values are also valid.
-Empty input sets are also valid.

The program must ask the user if he/she wants to put in more values after the first sequence of inputs.
If yes, the sort algorithm must be repeated just for new inputs.

I must use the following algorithm (shown in Java-like syntax):
n=0;
read in;
while in !=9999 {
vals[n]=in;
n++;
read in;
}
for (i=0;i<n-1;i++) {
for (j=0;j<n-1;j++) {
if (vals[j] > vals[j+1]) {
//swap
temp=vals[j];
vals[j]=vals[j+1];
vals[j+1]=temp;
}
}
}
for (i=0;i<n;i++) {
print vals[i]
}
//ask user if he wants to sort another sequence.

Also, I am to use the following line to set up memory to hold the input:
.data
vals: .space 4000

The program must compile, be able to respond to different input cases correctly, correctly use a sorted list, correctly use a reverse sorted list, work correctly when interacting with integers greater than 10000, work correctly when interacting with negative numbers, work correctly when interacting with combinations of negative and positive integers, the termination character 9999 should not be part of the output in any of the above cases, and the program asks for more inputs.

Also, if you could explain what is going on in each step through the use of comments, I would be extremely grateful.


Explanation / Answer

please rate - thanks

.data
vals: .space 4000
message1: .asciiz "Enter an integer: 9999 to exit "
message2: .asciiz "The array contains the following: "
next_line: .asciiz " "

.text
.globl main
main:

la $a1, vals # $a1 is the base address of the array
li $a2, 9 # $a2 = 9;

li $t0, 0 # i = 0;
li $t1,9999
loop:
# cout << message1 << endl;
la $a0, message1
li $v0, 4
syscall
li $v0, 5
syscall
beq $v0,$t1,sort
addi $t0,$t0,4
sw $v0, ($a1)
addi $a1, $a1, 4 # move the array over by 1 element
j loop

sort:

    la   $t4, vals         #t0 is number up to   outter loop
         la   $t1, vals          #t1 is number comparing to   inner loop
         addi $t1,$t1,4
        la $t8,vals
        add $t8,$t0,$t8
         la $t9,vals
        add $t9,$t0,$t9    
        addi $t9,$t9,-4
loops:    lw   $t2,($t4)           #get number 1   outter loop
         lw   $t3,($t1)           #get number 2   inner loop
         blt $t2,$t3,next        #don't need to swap
         sw $t3,($t4)           #swap
         sw   $t2,($t1)
next:    addi $t1,$t1,4
         blt $t1,$t8,loops       #inner loop done?
         addi $t4,$t4,4             #yes-increment outter loop
         move $t1,$t4
         addi $t1,$t1,4
         blt $t4,$t9,loops       #outter loop done?

printArray:
la $a1,vals

la $a0, message2
li $v0, 4
syscall
loop1:
blez $t0, done
li $v0, 1
lw $a0, 0($a1)
syscall
la $a0, next_line
li $v0, 4
syscall
addi $a1, $a1, 4
addi $t0, $t0, -4
j loop1
done:
j done

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote