只交换一次?

时间:2015-03-08 03:33:33

标签: assembly mips

我正在尝试在MIP中实施Bubblesort。我很接近搞清楚,不幸的是我的代码似乎只交换了数组中的一个元素。我的想法是交换没有链接回循环过程,因此在调用要打印的子例程时只执行一次交换。不幸的是,我不是那种经验丰富的MIP,所以我很可能会错误地跳跃。任何见解将不胜感激。

[编辑]

添加一些示例输出:

所以[3,4,1,2,5,6] - > [3,1,4,2,5,6]我不知道如何保持交换直到排序完成。

1 个答案:

答案 0 :(得分:0)

SPIM / MARS具有调试功能,可让您单步执行代码并沿途查看寄存器值。我建议您学习如何使用这些功能。

我可以看到您的代码至少有两个问题。一个是你的swap例程永远不会返回,所以CPU将继续执行swap例程之后的任何事情。您应该使用swap结束jr $ra
另一个问题是您之前将$a1设置为 length_a的地址正在调用sort,但在sort中您只需move $s3, $a1,它仍然会为您提供length_a的地址而不是值6.我应该更改movelw $s3, ($a1)