【问题标题】:Convert C++ Code to Assembly for SPIM将 C++ 代码转换为 SPIM 的程序集
【发布时间】:2010-06-23 16:28:54
【问题描述】:

让我编译的程序集文件在 SPIM 上运行时遇到了很多麻烦。基本上我想写一个 c++ 文件,然后生成一个 .s 文件,我可以在 SPIM 中打开而不会出错。这意味着程序集必须使用 MIPS I 指令(某些 MIPS II)在 MIPS32 ABI 中。我该怎么做呢?现在我正在使用 g++,但是当我尝试在 SPIM 中运行文件时遇到了重大错误。我正在使用 MAC OSx 10.6.3,并且正在 Linux 机器上进行远程编译。有没有我可以使用的特殊编译器让我更容易做到这一点?

【问题讨论】:

  • 对不起,我真的不熟悉这个词。我正在使用“mipseb-linux-g++”进行编译。我在一台 linux 机器上做,MIPS 3k。

标签: c++ compiler-construction assembly spim


【解决方案1】:

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

如果您启用像-O1-Og 这样的优化以获得更易读的代码,您还需要g++ -S -fno-delayed-branch。通常 SPIM 被配置为模拟没有分支延迟槽的 MIPS,但 gcc 会假设分支后的指令即使被执行也会运行。 -fno-delayed-branch 让 gcc 用 nop 填充任何分支延迟槽。

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

您需要避免使用像 std::vector 这样的 C++ 库,这些库相对于本地数组编译成大量额外代码,尤其是没有优化的情况下,除非您真的需要这些功能。

【讨论】:

  • 顺便说一下,C++ 需要来自其他库的大量运行时支持。先用一个普通的 C 程序试试。
猜你喜欢
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多