M1 Mac 上使用哪些汇编程序?规范文档在哪里?

Kla*_*ius 4 macos assembly apple-silicon apple-m1

我想更好地了解哪些汇编程序实际上在 M1/M2 MacO 机器(例如 MacBook Pro)上工作。

\n
    \n
  1. 据我了解,我可以使用的唯一可能的汇编器是Apple提供的“as”。M1+ 机器不再支持 Gnu 汇编程序(\'gas\'):\'as -Q\' 是这样说的。但许多网站提到Apple汇编器确实没有维护,并且有一个切换到llvm-clang汇编器的方法,我没有找到有用的文档(用于运行汇编器,而不是构建编译器)。
  2. \n
\n

真的 ?

\n
    \n
  1. 我正在查看文档,大多数情况下只找到“Mac OS X 汇编程序指南”。这是一个非常旧的副本,我什至不知道在哪里可以获得最新版本。
  2. \n
\n

这看起来不错,但似乎并不完全完整 \xe2\x80\x93 例如,您可以使用带有命名参数的宏,而不是仅在 \'as\' 中使用 $0, ... $n 。指南中没有提到。

\n

有什么好的建议可以从gas移植到苹果汇编器吗?已知问题和解决方案?

\n

例如,在“gas”中,我相信我可以使用 .set 重新定义符号,但不能使用“as”。\n我确实是一个非常缺乏经验的汇编爱好者,所以一些规范资源会很棒。在我今天看来,M1 Mac 上的汇编编程与其说是一门科学,不如说是一种黑暗艺术。

\n

感谢您的任何启发。

\n

Kla*_*ius 5

我想记录到目前为止我发现的内容:

  1. 苹果的旧汇编程序指南(根据 Jake 'Alquimista' LEE)很可能没​​有用,因为本指南很可能不是基于 M1 Mac 使用的 clang 汇编程序)。在新的 SDK 网站上未找到新文档。

可能最准确的文档似乎是 https://developer.arm.com/documentation/100067/0611/armclang-Integrated-Assembler

还有https://developer.arm.com/documentation/100068/0612/migration-from-armasm-to-the-armclang-integrated-assembler/symbol-definition-directiveshttps://developer.arm.com/文档/100068/0612/从armasm迁移到armclang集成汇编器/armasm和gnu-syntax-assemble-code之间的差异概述?lang=en

  1. 最有可能的是,Apple 或多或少地直接使用 clang 汇编器。它与 gnu 汇编器类似,但并不完全相同。例如,jonesforth 使用一个功能,您可以将符号一遍又一遍地设置为非绝对值(如标签)来构建命令链接列表 - 该功能在 GNU 汇编器中工作,而不是在 llvm 中工作(至少是苹果汇编器)。此外,苹果汇编器不允许在一行中使用多个由“;”分隔的语句,这在移植大量使用此功能的大型汇编文件时是一个巨大的麻烦。

  2. 我相信llvm项目在github中有源代码,特别是这里的汇编器解析:https ://github.com/llvm/llvm-project/blob/92920c4fe3e29640e45153f3048105970b5b1e42/llvm/lib/MC/MCParser/AsmParser.cpp

我意识到这相当不完整,但如果我在苹果开发论坛或直接从苹果支持获得有用的回复,我会更新答案。