基本上我需要把这种C代码( http://pastebin.com/7EupfQ5n )至MIPS组件。 我花了一条缝在这一点,但我有麻烦。
我有什么到目前为止,这是( http://pastebin.com/LpS6Mqr1 )。 但是,当我在模拟器上运行的代码,它在一个无限循环,尽管我放入数组中的运行,我找不到在那里做。 我会认为它引用在同时,如果语句不正确的方式排列,但我不知道如何或为何。
如果有人可以帮助,那将是非常赞赏。
此外,有没有办法有适用于Mac OSX一个C到MIPS的编译器(译者?)? 我已经安装GCC但-mips标志我产生一个错误。 谢谢!
下一次,请使用调试器或仿真逐步执行代码。 有报道说,你可能已经注意到自己几个明显的错误。
- 您的所有
move
(伪)指令是相反的。 应该是move destination, source
。 - 你应该初始化
$s0
在开始零,是安全的。 -
bge $s3, $t4, sumBetween1If3
(线87)使用了错误的寄存器(复制粘贴错误?)。 它应该是bge $s4, $s6, sumBetween1If3
- 您应该删除线97,因为如果你交换操作数(它会破坏你的总和这是目前的形式没用,直接有害
$s5
)。 - 不知道你想做的事与线98-100,因为你没有用什么
$ra
或堆栈的其他地方。 因此,那些线搞乱了两个,使你的无限循环。 简单地删除那些3线。
有趣的是,你的数组访问都没事。 有很多需要改进的可能性,不过,最值得注意的是,没有必要两次加载数组项。 我假设你打算删除所有多余的跳跃,这只是去下一个指令反正。
最简单的检查方法是由编译器生成的输出比较汇编代码。
你不需要GCC做到这一点(和经历来创建跨平台编译器所需的所有繁琐的步骤),如果你已经铛安装在机器上。 然而不幸的是,这是安装在Mac铛的版本不支持MIPS,所以你必须直接从LLVM的网站获得铛,或做一台Linux机器上。 一旦你铛,只需运行
clang -S -target mips -o mips.asm ./your_file.c
并与比较汇编代码mips.asm
文件。
我已经包含了命令的输出在这里 。