c++ - 将 C++ 代码转换为 SPIM 程序集

标签 c++ compiler-construction assembly spim

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

最佳答案

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

如果您启用像 -O1-Og 这样的优化以获得更多,您还需要 g++ -S -fno-delayed-branch可读代码。通常 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/

相关文章:

c - GDB 没有那个文件或目录

c - jmp 到内联 AVR C 中的地址

assembly - 手工组装 x86 调用指令

c++ - 在复制构造函数中执行深复制

python - 不在实时服务器上托管编译器的原因是什么?

xcode - 转换为自动引用计数 (ARC) : 'Use of undeclared identifier' errors

c - wxDev-C++ 的 64 位编译器

c++ - 无法创建 constexpr std::vector

c++ - 从套接字读取到 basic_filebuf

c++ - 从 C++(或 C)回调调用 python 方法