从C调用Mips

时间:2012-09-18 07:26:08

标签: c assembly mips

我想从我的C程序调用汇编(特别是MIPS)代码并从程序集中调用C
我决定将GNU GCC作为我的编译器,(我也猜测我需要一个模拟器?)
我在x86 Win 7机器上。 有一些事情我不清楚这是如何能够/应该有效的。

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

任何人都可以帮我解决这个问题,或许可以指出我可以从哪里学到这些魔法吗?

由于

免责声明:我正在为学校的学分提供自我修改代码项目的验证,这段代码将作为一个例子,但我没有得到任何关于此代码的信任。

1 个答案:

答案 0 :(得分:2)

最常见的MIPS调用约定描述为here。编写C可调用汇编例程的最简单方法是在C中为例程编写一个框架,然后将编译器的汇编代码输出复制到汇编源代码中(使用gcc的-S选项)。假设您要将C中定义的汇编程序函数称为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交叉编译器(见下文)使用-S-O0选项编译该函数,这将生成一个文本输出文件foo.S,为您提供MIPS汇编程序源代码,用于访问函数foo的参数,并显示返回值的位置。只需将源文件复制到您自己的汇编程序源中,然后添加计算foo所需的汇编程序计算。

一旦你按照另一个方向打电话,就可以直接从汇编中调用C.

您可以从cross compiler(以前称为Codesourcery)下载免费的MIPS gcc Mentor Graphics工具链。

您可以从here下载免费的,功能齐全的(它启动并运行Linux)MIPS模拟器。不要使用SPIM或MARS,因为它们不能完全模拟MIPS架构。