Write a program in MIPS assembly language that implements the bubble sort algori
ID: 3623362 • Letter: W
Question
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 termination value of 8888 will be used to signify the end of the input sequence. This value is not to be considered part of the input data set. However, any value greater than 8888 that is entered prior to the 8888 is still valid. Zero and negative values are also valid. Empty input sets are also valid.Use the following algorithm, shown in Java-like syntax:
n=0;
read in;
while in != 8888 {
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];
}
Use the following line to set up memory to hold the input:
.data
vals: .space 4000
Explanation / Answer
please rate - thanks
.data
numbers: .space 4000
message1: .asciiz "Enter an integer: 8888 to exit "
message2: .asciiz "The array contains the following: "
next_line: .asciiz " "
.text
.globl main
main:
la $a1, numbers # $a1 is the base address of the array
li $a2, 9 # $a2 = 9;
li $t0, 0 # i = 0;
li $t1,8888
loop:
# cout << message1 << endl;
la $a0, message1
li $v0, 4
syscall
# cin >> numbers[i];
li $v0, 5
syscall
beq $v0,$t1,sort
addi $t0,4
sw $v0, ($a1)
addi $a1, $a1, 4 # move the array over by 1 element
j loop
sort:
la $t4, numbers #t0 is number up to outter loop
la $t1, numbers #t1 is number comparing to inner loop
addi $t1,4
la $t8,numbers
add $t8,$t0,$t8
la $t9,numbers
add $t9,$t0,$t9
addi $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,4
blt $t1,$t8,loops #inner loop done?
addi $t4,4 #yes-increment outter loop
move $t1,$t4
addi $t1,4
blt $t4,$t9,loops #outter loop done?
printArray:
la $a1,numbers
# cout << message2 << endl;
la $a0, message2
li $v0, 4
syscall
loop1:
blez $t0, done
li $v0, 1
lw $a0, 0($a1)
syscall
#cout << " " << endl;
la $a0, next_line
li $v0, 4
syscall
addi $a1, $a1, 4
addi $t0, $t0, -4
j loop1
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.