我想與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