我想从我的C程序调用汇编(特别是MIPS)代码并从程序集中调用C 。
我决定将GNU GCC作为我的编译器,(我也猜测我需要一个模拟器?)
我在x86 Win 7机器上。
有一些事情我不清楚这是如何能够/应该有效的。
任何人都可以帮我解决这个问题,或许可以指出我可以从哪里学到这些魔法吗?
由于
免责声明:我正在为学校的学分提供自我修改代码项目的验证,这段代码将作为一个例子,但我没有得到任何关于此代码的信任。
答案 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架构。