M1 Mac上如何在VS Code中安装配置x86汇编运行环境
M1芯片Mac + 2022版VS Code 运行x86汇编配置方案
M1芯片是ARM64架构,无法直接运行x86指令,靠苹果官方Rosetta 2转译层就能实现x86汇编程序的编译、运行、调试,你已经装好C++环境的话,大部分基础依赖都齐了,按下面步骤配置就行:
第一步:补全基础依赖
- 先确认Rosetta 2已安装,终端执行
softwareupdate --install-rosetta,按提示走完安装流程即可,这是苹果官方的转译层,兼容性有保障。 - 如果你课程用的是NASM语法的x86汇编,终端执行
brew install nasm安装汇编器;如果用的是AT&T语法、靠clang编译,不用额外装,你配C++环境带的clang就支持。
第二步:安装VS Code必要插件
2022版VS Code对下面这些插件兼容性都没问题,直接在插件市场搜了装就行:
x86 and x86_64 Assembly:提供x86汇编的语法高亮、代码提示、自动补全Code Runner:支持单文件一键运行,不用每次手动敲终端命令- 微软官方
C/C++插件:你之前配C++环境应该已经装了,用来提供调试支持,没装的话补上。
第三步:配置一键运行规则
打开VS Code的设置(快捷键Cmd+,),点右上角的打开设置JSON按钮,在配置里找到code-runner.executorMap字段,添加asm后缀对应的执行命令:
"code-runner.executorMap": { // 如果你用NASM语法,用下面这行 "asm": "nasm -f macho64 $fileName -o $fileNameWithoutExt.o && ld -arch x86_64 -macosx_version_min 12.0 -lSystem $fileNameWithoutExt.o -o $fileNameWithoutExt && arch -x86_64 ./$fileNameWithoutExt", // 如果你用clang/AT&T语法,把上面的asm值换成下面这行 // "asm": "clang -c -arch x86_64 $fileName -o $fileNameWithoutExt.o && ld -arch x86_64 -macosx_version_min 12.0 -lSystem $fileNameWithoutExt.o -o $fileNameWithoutExt && arch -x86_64 ./$fileNameWithoutExt" }
配置完之后,打开汇编源码文件,点右上角的运行按钮,或者按Ctrl+Option+N就能直接编译运行,结果会输出在VS Code的终端面板里。
命令说明:第一段把汇编源码编译为x86_64架构的目标文件,第二段链接为可执行文件,第三段强制调用Rosetta层运行x86程序,避免系统默认用ARM架构启动报架构不匹配错误。命令里的
macosx_version_min后面的版本号填你自己当前Mac的系统大版本就行,比如13.0、14.0都可以,不影响运行。
第四步:配置断点调试(可选)
如果需要单步调试、看寄存器/内存值,就在你的汇编项目根目录新建.vscode文件夹,在里面建两个配置文件:
第一个是tasks.json,用来定义构建任务:
{ "version": "2.0.0", "tasks": [ { "label": "build x86 asm", "type": "shell", // 用NASM就保留下面这行命令,用clang就替换成之前提过的clang编译命令 "command": "nasm -f macho64 ${file} -o ${fileBasenameNoExtension}.o && ld -arch x86_64 -macosx_version_min 12.0 -lSystem ${fileBasenameNoExtension}.o -o ${fileBasenameNoExtension}", "group": { "kind": "build", "isDefault": true } } ] }
第二个是launch.json,用来定义调试启动规则:
{ "version": "0.2.0", "configurations": [ { "name": "Debug x86 asm", "type": "lldb", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}", "args": [], "preLaunchTask": "build x86 asm", "arch": "x86_64" } ] }
注意arch字段必须填x86_64,否则调试器会默认用ARM架构启动,直接报错。配置完之后按F5就能启动调试,支持打断点、查看寄存器、单步执行。
常见踩坑提醒
- M1上的Rosetta 2只支持64位x86(x86_64)程序,如果你课程学的是32位x86汇编,这套配置跑不了,要么把代码改成64位版本,要么装x86架构的Linux虚拟机跑32位环境。
- MacOS的x86汇编系统调用号、函数调用约定和Linux不一样,不要直接抄Linux平台的汇编代码,否则运行会直接崩溃。
- 编译链接的时候必须加
-arch x86_64参数,否则工具链默认会编译出ARM64架构的二进制,没法运行x86逻辑。
内容的提问来源于stack exchange,提问作者s.eyal
相关产品推荐
相关产品推荐

