Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mips 从升序到降序_Mips - Fatal编程技术网

Mips 从升序到降序

Mips 从升序到降序,mips,Mips,我是MIPS的初学者,希望有人能帮我回答这个问题。以下是我的MIPS代码,用于按升序对数组进行排序: .data nums: .word 10 elems: .word 23, 42, 54, 10, 56, 78, 15, 43, 21, 87 space: .asciiz " " end: .asciiz "The end." .text la $s0, elems lw $t4, nums reset: li $t0, 0 #off

我是MIPS的初学者,希望有人能帮我回答这个问题。以下是我的MIPS代码,用于按升序对数组进行排序:

.data
    nums: .word 10
    elems: .word 23, 42, 54, 10, 56, 78, 15, 43, 21, 87
    space: .asciiz " "
end: .asciiz "The end."
.text
        la $s0, elems
        lw $t4, nums
reset:  li $t0, 0 #offset
        li $t5, 0 #count up to nums
loop:   add $s1, $s0, $t0
        lw $s3, ($s1)
        addi $t1, $t0, 4
        add $s2, $s0, $t1
        lw $s4, ($s2)
        bgt $s3, $s4, swap
next:   addi $t5, $t5, 1
        addi $t0, $t0, 4
        beqz $t4, exit
        beq $t5, $t4, nummin
        j loop
nummin: subi $t4, $t4, 1
        j reset
swap:   sw $s3, ($s2)
        sw $s4, ($s1)
        j next
exit:   li $t0, 0
        li $t1, 0
loop2:  li $v0, 1
        add $t2, $s0, $t1
        lw $a0, ($t2)
        syscall
        li $v0, 4
        la $a0, space
        syscall
        addi $t0, $t0, 1
        addi $t1, $t1, 4
        beq $t0, 10, done
        j loop2
done:   li $v0, 4
        la $a0, end
        syscall
代码运行正常,我得到了想要的输出:

10 15 21 23 42 43 54 56 78 87 The end.
但当我试图通过在bgt$s3,$s4中切换$s3和$s4,将其转换为降序排序时,我得到以下输出:

1750335520
87
78
56
54
43
42
23
21
15

有人能解释一下吗?提前感谢。

您在内部循环中走得太远了。在递增并离开该循环之前,$t5=9,然后$s1将指向最后一个元素,$s2将指向后面的元素。然后你会得到一个外来值(1750335520)冒泡到顶部。因为它恰巧如此之大,所以它起了作用