You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在搭载M1芯片的MacBook上编译ARM汇编代码

问题解答

1. 关于Mac自带的as汇编器

  • macOS确实自带as命令,但它不是GNU Binutils里的传统GAS汇编器,而是LLVM clang封装的汇编前端,语法规则、指令适配逻辑和你参考的Linux ARM汇编资料里的GNU as有很大差异,这是你本次报错的核心原因之一。
  • 另外你当前写的是32位ARM Linux的汇编代码,M1芯片是ARM64(AArch64)架构,指令集、寄存器命名、系统调用规则完全不兼容,这也是报错的核心原因。

2. 是否需要更换编译器

不需要完全更换,你可以根据学习方向二选一:

  • 如果你就是想跑你当前写的32位ARM汇编代码:可以安装qemu来模拟32位ARM Linux环境,直接使用环境内的GNU as编译运行即可。
  • 如果你想学习M1原生的ARM64汇编:直接用自带的as就可以,但需要调整你的代码语法和指令规则适配Apple ARM64汇编要求,适配后的Hello World示例写法如下:
.global _main
.section __TEXT,__text
_main:
    mov x0, #1
    adrp x1, message@PAGE
    add x1, x1, message@PAGEOFF
    mov x2, #13
    mov x16, #4
    svc #0x80

    mov x0, #0
    mov x16, #1
    svc #0x80

.section __DATA,__data
message:
    .ascii "Hello, World\n"

对应的编译链接命令如下:

as first.asm -o hello.o
ld hello.o -o hello -lSystem -syslibroot `xcrun -sdk macosx --show-sdk-path`

3. M1芯片学习汇编的合理性

  • 用M1学习ARM汇编非常合理,本身就是原生ARM64架构,运行、调试汇编代码不需要额外模拟开销,比在x86设备上模拟ARM的体验好很多。
  • 不能直接原生运行x86汇编代码,但可以通过Rosetta 2转译运行x86架构的程序,也可以安装qemu、UTM等工具模拟x86环境,在模拟环境内编写、运行x86汇编代码。

内容的提问来源于stack exchange,提问作者cachedcashew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:15:01