1

我想从我的 C 程序中调用程序集(特别是 MIPS)代码,然后从程序集中调用C。
我已经决定使用 GNU GCC 作为我的编译器,(我也猜想我需要一个模拟器?)
我在 x86 Win 7 机器上。有些事情我很不清楚这可以/应该如何解决。

  • 如果 MIPS 将使用具有 32 个 regs 的加载存储架构,而 C 将继续使用寄存器内存架构,因为我在 x86 上?
  • 现在我想调用 mips 程序集而不是 x86 程序集,我可以/我仍然使用 asm() 吗?
  • 如果 MIPS 使用的寄存器比 C 多,我能从我的 C 代码中访问这些寄存器吗?

谁能帮我解决这个问题,也许可以指出我可以在哪里学习这种魔法?

谢谢

免责声明:我正在为学校的学分进行自我修改代码项目的验证,此代码将用作示例,但我没有获得此代码的任何学分。

4

1 回答 1

2

此处描述了最常见的 MIPS 调用约定。编写 C 可调用汇编例程的最简单方法是用 C 编写例程的骨架,然后将编译器输出的汇编代码复制到汇编源中(使用 gcc 的-S选项)。假设您要调用Cas中定义的汇编程序函数int foo(int a, int b)。您可以在C. 例如,将以下内容放入 foo.c:

int foo(int a, int b) {
    return a+b;  // some simple code to access all arguments and the return value
}

然后,您将使用 MIPS 交叉编译器(见下文)使用 gcc 的-S-O0选项编译该函数,这将生成一个文本输出文件foo.S,为您提供 MIPS 汇编源代码以访问函数的参数foo并显示将返回值放在哪里. 只需将该源文件复制到您自己的汇编程序源中,然后添加您需要计算的汇编程序计算foo

一旦你想出了另一个方向,从汇编中调用 C 就很简单了。

您可以从Mentor Graphics(以前的 Codesourcery)下载免费的 MIPS gcc交叉编译器工具链。

您可以从这里下载一个免费的、功能齐全的(它可以引导并运行 Linux)MIPS 模拟器。不要使用 SPIM 或 MARS,因为它们不能完全模拟 MIPS 架构。

于 2012-09-18T18:18:05.633 回答