Assembly MIPS是否有编码约定?
我想链接到一个C编译器Assembly MIPS是否有编码约定?,assembly,mips,calling-convention,abi,mips32,Assembly,Mips,Calling Convention,Abi,Mips32,我想链接到一个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); } 使用MIPS向函数传递值的约定是什么 是否有编码约定或类似RFC的文档 没有正确的方法,用汇编语言你可
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);
}
- 使用MIPS向函数传递值的约定是什么
- 是否有编码约定或类似RFC的文档
- 没有正确的方法,用汇编语言你可以做任何你想做的事情
但是,如果你正在尝试链接一个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
00000000:
0:27bdffe8附加sp,sp,-24
4:24a50007增补a1、a1、7
8:afbf0014西南ra,20(sp)
c:afb00010 sw s0,16(sp)
10:0亿日航0
14:00808025移动s0,a0
18:8fbf0014 lw ra,20(sp)
1c:2610005 addiu s0,s0,5
20:0201021地址v0、s0、v0
24:8fb00010 lw s0,16(sp)
28:03e00008 jr ra
2c:27bd0018附加sp,sp,24
我认为这说明了这一点,并为更复杂的参数或返回值提供了一种解决方法。我更喜欢编译和反汇编来编译成汇编。更容易阅读和实际查看所生成的内容。YMMV.你做过什么调查吗?例如,您至少检查过吗?您可以通过几种方式消除正常gcc
-S
输出中的“噪声”。最简单的方法通常是使用已安装MIPS和MIPS64 gcc5.4的锁紧螺栓。例如。不幸的是,它通常对汇编指令和注释进行的过滤似乎不能很好地处理32位输出,函数调用将函数地址加载到寄存器中,而不是使用直接jal。我想有一个代码模型选项我不知道?无论如何,也请参见。尽管汇编+反汇编可能对MIPS更好,因为gcc输出使用编号寄存器,如$31
,而不是ra
。我构建了自己的binutils,并将其从s0、a0、ra(EWW)更改为使用简单补丁注册编号……我认为arm binutils现在需要相同的补丁。