我想与C编译器链接。 我的问题是 - 使用MIPS将值传递给函数的正确方法是什么。 我应该将所有内容加载到$ a0 ... 3或$ v0..1?
答案 0 :(得分:2)
没有正确的方法,使用汇编语言,您可以随心所欲。
但是,如果您尝试使用C编译器进行链接,那么为什么不尝试使用您拥有的编译器?它显然可以创建与同一编译器生成的其他对象链接的对象。
extern unsigned int more_fun ( unsigned int a, unsigned int b );
unsigned int fun ( unsigned int a, unsigned int b )
{
unsigned int c;
c = more_fun(a,b+7);
return(c+a+5);
}
这是我的产生(带有某些标志),对象没有链接......
00000000 <fun>:
0: 27bdffe8 addiu sp,sp,-24
4: 24a50007 addiu a1,a1,7
8: afbf0014 sw ra,20(sp)
c: afb00010 sw s0,16(sp)
10: 0c000000 jal 0 <fun>
14: 00808025 move s0,a0
18: 8fbf0014 lw ra,20(sp)
1c: 26100005 addiu s0,s0,5
20: 02021021 addu v0,s0,v0
24: 8fb00010 lw s0,16(sp)
28: 03e00008 jr ra
2c: 27bd0018 addiu sp,sp,24
我认为这会解决它,并为您提供一种方法来找出更复杂的参数或返回值。我更喜欢编译和反汇编来编译成程序集。更容易阅读和实际看到生产的东西。 YMMV。