0

在过去的五个小时里,我一直在尝试解决这个问题。我必须将第一个索引与最后一个索引进行比较。如果第一个 < 最后一个,它们将被交换。如果我的数组有五个或更少的元素,这很好用。任何更大的东西,两次迭代后交换停止。我究竟做错了什么?

我的反转数组的子程序:

ReverseArray:
    add $s0, $a0, $0

    li  $t2, 1
    la  $s0, array
    li  $s1, 4
    sub $s2, $t0, 1         #lines 177 - 180 finds the last index of the array
    mult    $s2, $s1
    mflo    $s2
    add $t3, $s2, $s0

    swap:
        lw  $t5, 0($s0)
        lw  $t4, 0($t3)     #stores the element of last index into $t4

        sle $t1, $t5, $t4
        beq $t1, $0, finish

        li  $v0, 1          #only in the loop for debug purposes
        add $a0, $t1, $0
        syscall

        add $t6, $t5, $0
        sw  $t4, 0($s0)
        sw  $t6, 0($t3)

        sub $s2, $s2, 4
        add $t3, $s2, $s0
        add $s0, $s0, 4
        j   swap
    finish:

        add $v1, $s0, $0
        jr  $ra

假设我将这些数字输入到我的数组中:

3 6 9 12 15 18

我得到的是:

18 15 9 12 6 3
4

1 回答 1

1

循环的退出条件似乎是第一个元素大于第二个元素,如果您尝试反转数组(您应该比较地址或索引),这是不正确的。你的更新方式$t3看起来也很奇怪。

这是一个工作循环:

swap:
    lw  $t5, 0($s0)
    lw  $t4, 0($t3)     #stores the element of last index into $t4

    sw  $t4, 0($s0)
    sw  $t5, 0($t3)

    sub $t3, $t3, 4
    add $s0, $s0, 4
    sle $t1,$t3,$s0
    beq $t1,$0,swap    # repeat until $t3 <= $s0
于 2013-10-17T07:56:13.920 回答