Сборка MIPS, сортировка массива - PullRequest
0 голосов
/ 31 октября 2018

Мне нужно реализовать следующий алгоритм пузырьковой сортировки в 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
...