【问题标题】:How to compile ARM assembly in ARM syntax with Clang?如何使用 Clang 以 ARM 语法编译 ARM 程序集?
【发布时间】:2016-12-30 13:18:57
【问题描述】:

Clang 似乎默认采用 GNU 汇编语法。

如何使用 Clang 编译使用 ARM 语法如 this (directives)this (instructions) 的程序集文件?

【问题讨论】:

  • 您可能无法更改指令。如果你想要 armasm 指令,你需要使用 ARM 的 armasm。
  • @RossRidge,这里他们说如何在 Clang 中选择 x86 的语法:stackoverflow.com/questions/10990018/…。 ARM没有类似的东西吗?或者,如果您的意思是重构程序集文件以将指令从 ARM 更改为 GNU 语法 - 不,我不想这样做。
  • 这只会改变指令语法,不会改变使用的指令。如果您想使用您在帖子中链接的 armasm 指令,您可能需要使用其他支持这些指令的汇编程序,例如 armasm 本身。
  • 它可能已经是了。除了ARM,我不知道任何语法。但是它有两种变体,旧的 ARM 语法和更新的统一语法 (UAL)。我相信clang只支持后者。如果您想要旧形式,您可能还必须使用不同的汇编程序。
  • 有旧的和统一的,但是每个指令的确切细节在 arm 汇编器和 gnu 之间一直是不可移植的(好吧,gnu 汇编器总是设法破坏某些东西,使其在特定的 cmets 中不可移植)。许多指令和诸如 mrs/msr 指令格式的东西,是/曾经被 arm 工具或 gnu 工具或两者都敏感。您确实必须针对一种汇编语言。

标签: assembly syntax arm clang armasm


【解决方案1】:

汇编语言由汇编程序定义,即解析文件并从中生成机器代码的程序。众所周知,用于 x86 的 turbo assembler、microsoft assembler、nasm 和 gnu assembler 不符合相同的语言。没有理由假设任何其他汇编程序符合其他任何人的汇编语言。你永远不应该在问题中使用这样的链接,看看如何提问,但是如果你想使用 ARM 语法,你必须使用 ARM 汇编程序之一,这可能会变得昂贵。如果你想要 gnu 语法,你使用 gnu 和其他一些你使用其他一些。同样,C 编译器的作者应该或经常确实希望使输入符合 C 标准,这不是由编译器定义的,而是由标准机构定义的。该编译器的输出不必符合该编译器创建的标准以外的任何标准,他们可以选择某种对象格式的机器代码,或者他们可以选择某种汇编语言,因为他们经常选择他们想要的任何汇编器格式的汇编语言。没有理由期望它们支持多个汇编器。那么你显然将工具组合成一个链,一个编译器链到一个汇编器,而这些输出链到链接器。如果特定的 llvm 工具选择或仅支持由一个汇编程序定义的一种汇编语言,则没有理由期望它们支持另一种。如果他们很好地支持其他人,也许您可​​以使用正确的命令行选项。 llvm 工具和 gnu 一样是开源的,欢迎您随时更改您想要的任何内容以满足您的需求。

【讨论】:

  • 简短回答如果您不想使用 llvm 所针对的汇编程序,那么请使用目标汇编程序,或修改 llvm 以针对您的汇编程序,或者编写一个工具来移植输出,或者不要使用该编译器. Llvm 现在可以从 llc 而不是汇编程序生成对象,因此如果有帮助,您可以避免汇编步骤。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 2023-04-08
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 2015-11-12
相关资源
最近更新 更多