我正在尝试在MIP中实施Bubblesort。我很接近搞清楚,不幸的是我的代码似乎只交换了数组中的一个元素。我的想法是交换没有链接回循环过程,因此在调用要打印的子例程时只执行一次交换。不幸的是,我不是那种经验丰富的MIP,所以我很可能会错误地跳跃。任何见解将不胜感激。
[编辑]
添加一些示例输出:
所以[3,4,1,2,5,6] - > [3,1,4,2,5,6]我不知道如何保持交换直到排序完成。
答案 0 :(得分:0)
SPIM / MARS具有调试功能,可让您单步执行代码并沿途查看寄存器值。我建议您学习如何使用这些功能。
我可以看到您的代码至少有两个问题。一个是你的swap
例程永远不会返回,所以CPU将继续执行swap
例程之后的任何事情。您应该使用swap
结束jr $ra
。
另一个问题是您之前将$a1
设置为 length_a
的地址正在调用sort
,但在sort
中您只需move $s3, $a1
,它仍然会为您提供length_a
的地址而不是值6.我应该更改move
到lw $s3, ($a1)
。