我想与C编译器链接。 我的问题是 - 使用MIPS传递值以正常工作的正确方法是什么? 我应该加载一切到$ a0 ... 3或$ v0..1?MIPS-我如何获得与C编译器的链接?
回答
没有正确的方法,用汇编语言你可以做任何你想做的事情。
但是,如果您试图与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
我认为拼出来,并为您提供一种方式来弄清楚更复杂参数或返回值。我更喜欢编译和反汇编以汇编到汇编。阅读起来更容易,实际上看到的是什么。因人而异。
您可以通过几种方式摆脱正常gcc'-S'输出中的“噪音”。最简单的是使用Godbolt,它安装了MIPS和MIPS64 gcc5.4。例如https://godbolt.org/g/JrbUQD。不幸的是,它对汇编程序指令和注释的通常过滤似乎在32位输出上表现不佳,函数调用将函数地址加载到寄存器中,而不是使用直接jal。我想有一个我不知道的代码模型选项?无论如何,请参阅http://stackoverflow.com/questions/38552116/how-to-remove-noise-from-gcc-clang-assembly-output。 –
虽然汇编+反汇编对于MIPS来说可能仍然更好,因为gcc输出使用编号寄存器如'$ 31'而不是'ra'。 –
我建立了我自己的binutils,并从s0,a0,ra(ewww)更改为使用简单补丁注册数字......我认为arm binutils现在需要相同的补丁。 –
- 1. 我如何获得python与libz编译?
- 2. 如何交叉编译oath-toolkit的静态链接MIPS构建?
- 3. MIPS反编译器
- 4. 我如何编译MIPS架构的nfsutils?
- 5. C++编译链接
- 6. Borland C++编译器中的链接DLL
- 7. 如何解决C++编译器中的链接器错误
- 8. 如何编译mips gnu?
- 9. 编译wget与静态链接,自我编译(打开)ssl库链接问题
- 10. 编译和链接miracl C++
- 11. 编译Fortran和C++程序并从intel编译器链接
- 12. 编译C代码到MIPS汇编
- 13. 链接到编译为C++的C库
- 14. 无法获得c#linq查询与连接编译
- 15. 了解C#编译器如何处理链接linq方法
- 16. 将C++代码链接到Borland C++ 3.1编译器中的C
- 17. 如何获得C#.NET编译器程序集GUID
- 18. 如何将编译器链接到编辑器
- 19. C++链接器编程错误与MinGW
- 20. 如何获得链接dynamicallY?
- 21. 我想知道,编译器将如何获得字符序列
- 22. 如何在C++中编译编译器?
- 23. 的Xerces-C++编译/链接问题
- 24. 如何使用autoconf获取“编译”和“目标”C编译器
- 25. 将C翻译成MIPS汇编
- 26. C++链接器 - g ++如何获取ld
- 27. C到MIPS翻译
- 28. 如何将我的编译器和链接器指向Eclipse和Windows?
- 29. 如何获得MIPS中的LSB位?
- 30. 如何从C/C++中的给定URL获得视频链接
你做了什么研究吗?你有没有例如检查[维基百科](https://en.wikipedia.org/wiki/Calling_convention#MIPS)至少? – Jester