Мне нужно реализовать следующий алгоритм пузырьковой сортировки в MIPS:
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j+1] < arr[j])
{
// swap temp and arr[i]
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
И это то, что у меня есть для моего кода MIPS. Имейте в виду, я новичок в сборке. Это не работает, но я не уверен, где я иду не так. Мы должны использовать симулятор MARS MIPS, поэтому я не могу получить полную информацию о том, что происходит не так.
.data
array: .word 14, 12, 13, 5, 9, 11, 3, 6, 7, 10, 2, 4, 8, 1, 31, 51, 41, 71, 21, 61, 91, 81
space: .asciiz " "
.text
.globl main
main:
la $a0, array # loads a0 with address of array
li $t0, 0 # to = 0, iterator_i (outer loop)
li $t1, 0 # t1 = 0, iterator_j (inner loop)
addi $t2, 1, -22 # store n-1 in t2 for outer loop
sub $t3, $t2, $t0 # store n-1-i in t3 for inner loop
outerLoop:
blt $t2, $t0, exit # if i > n-1, exit
addi $t0, $t0, 1 # i++
li $t1, 0 # sets j = 0 after every outer loop iteration
j innerLoop
innerLoop:
blt $t3, $t1, outerLoop # go to outerLoop if n-1-i < j
addi $t4, $t0, 1 # ignore the increment of i
j ifStatement
ifStatement:
addi $t5, $t1, 4 # t5 = j + 1, which goes to next word
lw $a1, $t1($a0) # a1 = a[j]
lw $a2, $t5($a0) # a2 = a[j+1]
blt $a1, $a2, innerLoop # if a[j] < a[j+1] exit if statement
j swap
swap:
lw $t6, $a1 # tmp = a[j]
sw $a2, $a1 # a[j] = a[j+1]
sw $a1, $t6 # a[j+1] = tmp
j ifStatement
exit:
nop