2016-08-23 117 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生成对象而不是汇编器,因此如果有帮助的话,您可以避免组装步骤。 –