使我的已编译程序集文件在SPIM上运行非常麻烦。基本上,我想编写一个c ++文件,然后生成一个.s文件,可以在SPIM中打开它而不会出现错误。这意味着程序集必须使用MIPS I指令(某些MIPS II)在MIPS32 ABI中。我该怎么做呢?现在我正在使用g ++,但是尝试在SPIM中运行该文件时出现严重错误。我正在使用MAC OSx 10.6.3,并且正在Linux机器上进行远程编译。我是否可以使用一个特殊的编译器来简化此工作?

最佳答案

给编译器-S选项,它将生成汇编代码。然后,您将必须编辑代码,以便SPIM接受它。

如果启用了诸如g++ -S -fno-delayed-branch-O1之类的优化功能以获取更具可读性的代码,则还需要-Og。通常将SPIM配置为模拟不具有分支延迟插槽的MIPS,但是gcc会假定分支执行后的指令即使已被执行。 -fno-delayed-branch使gcc用nop填充任何分支延迟插槽。

另一个有用的选项是-fverbose-asm,让gcc使用每个操作数的C变量名称添加注释。

您将要避免使用像std::vector这样的C ++库,这些库可以编译成很多额外的代码,而不是本地数组,尤其是在没有优化的情况下,除非您确实需要这些功能。

关于c++ - 将C++代码转换为SPIM的程序集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3103560/

10-10 14:41