2016-08-23 115 views
1

看來,默認情況下,Clang採用GNU彙編語法。如何使用Clang在ARM語法中編譯ARM程序集?

如何用Clang編譯使用ARM語法的彙編文件this (directives)this (instructions)

+0

您可能無法更改指令。如果你需要armasm指令,你需要使用ARM的armasm。 –

+0

@RossRidge,在這裏他們說如何在Clang中爲x86選擇語法:http://stackoverflow.com/questions/10990018/how-to-generate-assembly-code-with-clang-in-intel-syntax。 ARM有沒有類似的東西? 或者,如果你的意思是重構彙編文件以將指令從ARM更改爲GNU語法 - 不,我不想這樣做。 –

+1

只改變指令語法,而不改變使用的指令。如果你想使用你在文章中鏈接的armasm指令,你可能需要一個不同的彙編器,一個支持這些指令的彙編器,比如'armasm'本身。 –

回答

0

彙編語言由彙編程序來定義解析文件並從中生成機器碼的程序。正如我們都知道的turbo彙編程序,x86的microsoft彙編程序,nasm和gnu彙編程序不符合相同的語言。沒有理由認爲其他彙編程序符合任何人使用匯編語言。您不應該在問題中使用類似鏈接,請參閱如何提問,但如果您想使用ARM語法,則必須使用其中一種ARM彙編程序,這樣可以獲得較高的價格。如果你想gnu語法你使用GNU和其他一些你使用其他。同樣,C編譯器的作者應該或者經常希望將輸入符合C標準,這不是由編譯器定義的,而是由標準機構定義的。該編譯器的輸出不必符合除該編譯器創建的標準之外的任何標準,他們可以選擇某些對象格式的機器代碼,或者他們可以選擇某種彙編語言,而不管他們想要的任何彙編器的格式如何。沒有理由期望他們支持多個彙編器。那麼你明顯地將工具組合成一個鏈,一個編譯器鏈接到一個彙編器,那些輸出鏈接到鏈接器。如果一個特定的llvm工具選擇或僅支持一個彙編語言定義的彙編語言,那麼沒有理由期望它們支持其他彙編語言。如果他們支持其他人,也許你可以使用正確的命令行選項。像GNU一樣的llvm工具是開源的,隨時歡迎你隨時改變任何你想要的來滿足你的需求。

+2

如果您不想使用llvm所針對的彙編程序,那麼可以使用目標彙編程序,或者修改llvm來定位彙編程序,或者編寫一個工具來移植輸出,或者不使用該編譯程序。現在,llvm可以從llc生成對象而不是彙編器,因此如果有幫助的話,您可以避免組裝步驟。 –