不能把这种C代码MIPS大会(Cannot translate this C code to MIP

2019-11-01 12:30发布

基本上我需要把这种C代码( http://pastebin.com/7EupfQ5n )至MIPS组件。 我花了一条缝在这一点,但我有麻烦。

我有什么到目前为止,这是( http://pastebin.com/LpS6Mqr1 )。 但是,当我在模拟器上运行的代码,它在一个无限循环,尽管我放入数组中的运行,我找不到在那里做。 我会认为它引用在同时,如果语句不正确的方式排列,但我不知道如何或为何。

如果有人可以帮助,那将是非常赞赏。

此外,有没有办法有适用于Mac OSX一个C到MIPS的编译器(译者?)? 我已经安装GCC但-mips标志我产生一个错误。 谢谢!

Answer 1:

下一次,请使用调试器或仿真逐步执行代码。 有报道说,你可能已经注意到自己几个明显的错误。

  1. 您的所有move (伪)指令是相反的。 应该是move destination, source
  2. 你应该初始化$s0在开始零,是安全的。
  3. bge $s3, $t4, sumBetween1If3 (线87)使用了错误的寄存器(复制粘贴错误?)。 它应该是bge $s4, $s6, sumBetween1If3
  4. 您应该删除线97,因为如果你交换操作数(它会破坏你的总和这是目前的形式没用,直接有害$s5 )。
  5. 不知道你想做的事与线98-100,因为你没有用什么$ra或堆栈的其他地方。 因此,那些线搞乱了两个,使你的无限循环。 简单地删除那些3线。

有趣的是,你的数组访问都没事。 有很多需要改进的可能性,不过,最值得注意的是,没有必要两次加载数组项。 我假设你打算删除所有多余的跳跃,这只是去下一个指令反正。



Answer 2:

最简单的检查方法是由编译器生成的输出比较汇编代码。

你不需要GCC做到这一点(和经历来创建跨平台编译器所需的所有繁琐的步骤),如果你已经铛安装在机器上。 然而不幸的是,这是安装在Mac铛的版本不支持MIPS,所以你必须直接从LLVM的网站获得铛,或做一台Linux机器上。 一旦你铛,只需运行

clang -S -target mips -o mips.asm ./your_file.c

并与比较汇编代码mips.asm文件。

我已经包含了命令的输出在这里 。



文章来源: Cannot translate this C code to MIPS Assembly
标签: c assembly mips