我想更好地了解哪些组装商实际上在M1/M2 MacOs机器上工作,比如MacBook Pro。
1.据我所知,我唯一可以使用的汇编器是Apple提供的“as”。Gnu汇编器(“gas”)在M1+机器上不再支持:'as -Q'是这么说的。但是很多网站提到Apple汇编程序真的没有维护,而且有一个到llvm-clang汇编程序的切换,我没有找到有用的文档(用于运行汇编程序,而不是构建编译器)。
真的吗?
1.我正在查找文档,我几乎只找到了“MacOSX汇编指南”。而且是一个非常旧的副本,我甚至不知道在哪里可以找到最新的版本。
这看起来不错,但似乎并不完全完整-例如,您可以使用命名参数的宏,而不是在'as'中仅使用$0,...$n。指南中未提及。
有没有什么好的指针来从gas移植到apple汇编程序?已知的问题和解决方案?
例如,在“gas”中,我相信我可以用.set重新定义符号,但不能用“as”。我真的是一个非常缺乏经验的汇编业余爱好者,所以一些规范的资源会很棒。就我今天看到的,在M1 Mac上的汇编编程与其说是一门科学,不如说是一门黑暗的艺术。
谢谢你的启发。
1条答案
按热度按时间8i9zcol21#
我想记录我目前的发现:
1.来自苹果的old assembler guide(根据Jake“Alquimista”LEE的说法)很可能没有用,因为本指南很可能不是基于M1 Macs使用的clang汇编程序)。在新的SDK站点上没有找到新的文档。
最可能准确的文档似乎是https://developer.arm.com/documentation/100067/0611/armclang-Integrated-Assembler。
还有https://developer.arm.com/documentation/100068/0612/migrating-from-armasm-to-the-armclang-integrated-assembler/symbol-definition-directives和https://developer.arm.com/documentation/100068/0612/migrating-from-armasm-to-the-armclang-integrated-assembler/overview-of-differences-between-armasm-and-gnu-syntax-assembly-code?lang=en
1.最有可能的是,苹果公司或多或少直接使用了clang汇编程序。它与gnu汇编程序类似,但并不完全相同。例如,jonesforth使用了一个特性,你可以将一个符号反复设置为非绝对值,如标签,以建立一个链接的命令列表--这在GNU汇编程序中有效,而在llvm中无效(至少苹果汇编程序是这样的)。另外,苹果汇编程序不允许在一行中用";',这在移植大量使用它的大型程序集文件时是一个巨大的麻烦。
1.我相信llvm项目在github中有源代码,特别是汇编程序解析:https://github.com/llvm/llvm-project/blob/92920c4fe3e29640e45153f3048105970b5b1e42/llvm/lib/MC/MCParser/AsmParser.cpp
我意识到这是相当不完整的,但我会更新答案,如果我曾经得到一个有用的回应,在苹果开发论坛或直接从苹果支持。