MIPS пузырьковая сортировка не сортирует - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь написать программу для сортировки моего массива с использованием пузырьковой сортировки, но мой вывод всегда совпадает с порядком ввода чисел, но ничего не сортируется. любая помощь в отношении того, что я имею неправильно, будет принята с благодарностью. он не выдает никаких ошибок при запуске, но и ничего не сортирует, так что я как бы нахожусь в кирпичной стене, выясняющей это

.data

prompt:     .asciiz "how many numbers will you enter?: "
intPrompt:  .asciiz "please enter a number: "
comma:      .asciiz   ", "
crlf:       .asciiz "\n" 
array:      .word 60
     .text
    .globl main
main:
li $t7,0        #counter for adding numbers to array
la $t0,array        # t0 = address of array
    la $a0,prompt       # load address of prompt into a0
li $v0,4            # load call code number to display a           string into v0
syscall             # system call to print the prompt string
li $v0,5            # load call code number to read an integer -> v0
syscall             # system call to read the integer and store in v0

#saving integer
move $t1,$v0        # move integer from v0 -> t1 to keep as count for loop
while:  
la $a0, intPrompt        #prompt for integer
li $v0,4                 #a0 = address of string
syscall                  #v0 = 4, indicates display a String

li $v0,5                 # enter input -> v0
syscall                  # 5 is sys call for read int

sw $v0, ($t0)

add $t0,$t0,4            # move pointer ahead to next array element
add $t7,$t7,1            # increment counter


blt $t7,$t1,while        # branch to while if counter < size of array

#sort
li $t0,0
la $t0,array
li $t2,0        #initialize i with 0
li $t3,4        #initialize j with 4
add $t4,$t1,-1      #end index for outer loop
mul $t4,$t4,4       #end index for outer loop
mul $t5,$t1,4       #end index for inner loop

OUTER:
ble $t2,$t4,EOUTER
INNER:
ble $t3,$t5,EINNER
add $t6,$t3,-4
lw $s1,0($t0)
lw $s2,4($t0)
bgt$s1,$s2,NOSWAP
sw $s1,0($t0)
sw $s2,4($t0)
NOSWAP:
add $t3,$t3,4
j INNER
EINNER:
add $t2,$t2,4
li $t3,4
j OUTER
EOUTER:


#print array
li $t0, 0           # initilize array index value back to 0
    li $t7, 0           # initial size counter back to zero
    la $t0, array       # load address of array back into $t0

startPrint:

    lw $t2,($t0)        # load word a[i] into temp (t2)
    add $t4, $t4, $t2
    move $a0, $t2       # move a[i] to a0 for display
    li $v0,1            # display a[i]
    syscall

    la $a0,comma        # Display ", "
    li $v0,4            # a0 = address of message
    syscall             # v0 = 4 which indicates display a      string

    add $t0,$t0,4       # move pointer ahead to next array element 
    add $t7, $t7, 1     #increment counter

    blt $t7,$t1,startPrint     # branch to startPrint if counter < size of array

    la $a0,crlf         # Display "cr/lf"
    li $v0,4            # a0 = address of message
    syscall             # v0 = 4 which indicates display a string
    li $v0,10           # End Of Program
    syscall 
...