Assembly 只交换一次?
我正在尝试在MIPs中实现Bubblesort。我很快就明白了,不幸的是,我的代码似乎只交换了数组中的一个元素。我的想法是swap不会链接回循环过程,因此在调用print子例程时只执行一次swap。不幸的是,我在MIPs方面没有那么丰富的经验,所以很有可能我跳错了。如有任何见解,将不胜感激 [编辑] 添加一些示例输出:Assembly 只交换一次?,assembly,mips,Assembly,Mips,我正在尝试在MIPs中实现Bubblesort。我很快就明白了,不幸的是,我的代码似乎只交换了数组中的一个元素。我的想法是swap不会链接回循环过程,因此在调用print子例程时只执行一次swap。不幸的是,我在MIPs方面没有那么丰富的经验,所以很有可能我跳错了。如有任何见解,将不胜感激 [编辑] 添加一些示例输出: 所以[3,4,1,2,5,6]->[3,1,4,2,5,6],我不知道如何在排序完成之前继续交换 SPIM/MARS具有调试功能,允许您单步执行代码,并全程查看寄存器值。我建议您
所以[3,4,1,2,5,6]->[3,1,4,2,5,6],我不知道如何在排序完成之前继续交换 SPIM/MARS具有调试功能,允许您单步执行代码,并全程查看寄存器值。我建议您学习如何使用这些功能 我发现你的代码至少有两个问题。其一是,您的
交换
例程永远不会返回,因此CPU将继续执行交换
例程之后的任何操作。您应该以jr$ra
结束swap
另一个问题是,在调用
sort
之前,您将a1
设置为length\u a
的地址,但在sort
中,您只需移动s3$a1
,这仍然会给您length\u a
的地址,而不是值6。移动的move
应更改为lw$s3,($a1)