基本上我需要将这个C代码(http://pastebin.com/7EupfQ5n)翻译成MIPS程序集。我对此采取了一个裂缝,但我遇到了麻烦。
到目前为止,我(http://pastebin.com/LpS6Mqr1)。但是当我在模拟器中运行代码时,它会在无限循环中运行,尽管我将其放入数组中,但我找不到它在做什么。我会假设它在while和if语句中以不正确的方式引用数组,但我不确定如何或为什么。
如果有人可以提供帮助,那将非常感激。
另外,有没有办法为Mac OSX安装C到MIPS编译器(翻译器?)?我安装了GCC,但-mips标志为我生成了错误。谢谢!
答案 0 :(得分:0)
下次请使用调试器或模拟器来逐步执行代码。 您可能已经注意到了一些明显的错误。
move
(伪)指令都已颠倒过来。应该是move destination, source
。$s0
初始化为零,以确保安全。bge $s3, $t4, sumBetween1If3
(第87行)使用了错误的寄存器(复制粘贴错误?)。它应该是bge $s4, $s6, sumBetween1If3
$s5
)。$ra
或其他地方的堆栈。所以这些线条都搞乱了,导致你无休止的循环。只需删除这3行。有趣的是,您的阵列访问是可以的。但是,有许多改进的可能性,最值得注意的是,不需要两次加载数组项。我假设您打算删除所有多余的跳转,无论如何都要去下一条指令。
答案 1 :(得分:0)
最简单的检查方法是将汇编代码与编译器生成的输出进行比较。
如果您的计算机上已经安装了clang,则不需要gcc来执行此操作(并完成创建跨平台编译器所需的所有繁琐步骤)。然而不幸的是,安装在Mac上的clang版本不支持mips,因此你必须直接从llvm的网站获取clang,或者在linux机器上进行。一旦你得到了铿锵声,只需运行
clang -S -target mips -o mips.asm ./your_file.c
并将汇编代码与mips.asm
文件进行比较。
我已经包含了命令here的输出。