如何將Ada程序代碼和程序集(使用GAS組裝)混合?將ada與程序集混合
我知道如何鏈接Ada與C,但我怎麼可以鏈接程序集?我知道gcc從Ada代碼生成彙編代碼,正因爲如此,我認爲可以做這個交叉鏈接。
如何將Ada程序代碼和程序集(使用GAS組裝)混合?將ada與程序集混合
我知道如何鏈接Ada與C,但我怎麼可以鏈接程序集?我知道gcc從Ada代碼生成彙編代碼,正因爲如此,我認爲可以做這個交叉鏈接。
大概你會將程序集編譯成一個.o目標文件,並將其作爲參數提供給你的Ada編譯器。
也必須匹配調用和命名約定。 –
但我怎樣才能使用這兩個代碼? 例如,我在程序集中編寫兩個數字的總和,Ada中的程序將發送彙編代碼和彙編代碼的數字,以返回所添加的值。 – Alexandre
@Alexandre我希望這不會進入任何人使用的應用程序。除了教育自己之外,我不希望任何人在ADA項目中編寫程序集。對於像添加這樣的簡單問題,請使用內聯彙編器。但要意識到,如果你不知道自己在做什麼,那麼你可以打破一切。 http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Inlining-Inline-Assembler-Code.html#Inlining-Inline-Assembler-Code – whoplisp
如果要使用Ada執行任何類型的混合語言編程(包括Ada/Assember),則應該查看編譯器的文檔Interfacing pragmas,特別是其允許的調用約定。
例如,Gnat provides an Assembler
convention對於pragma import
/export
。
一般來說,您必須將您的彙編程序設計爲一個子程序,該子程序使用與您的接口編譯指示中使用的「約定」兼容的調用約定。
大多數編譯器還通過System.Machine_Code包支持某種內聯彙編。這使您可以將相同源文件中的少量彙編語言與Ada混合使用。
也許這會幫助嗎? http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Inline-Assembler.html –