必须先确认nasm -v和gcc -v在终端有输出,再创建selector为source.asm、shell_cmd调用nasm -f elf64与gcc链接的NASM_x86_64.sublime-build文件,并确保右下角语法显示为Assembly (NASM)。

确认系统已装好 NASM 或 GAS,且能被 Sublime 调用
Sublime Text 本身不带汇编器,它只调用你系统里已安装的 nasm 或 gcc(用 -x assembler 或直接传 .s 文件)。第一步不是写 .sublime-build,而是打开终端运行:
-
nasm -v(Windows/macOS/Linux 通用)——有输出说明 NASM 可用 -
gcc -x assembler -v /dev/null -o /dev/null 2>&1 | head -n1(验证 GCC 内置汇编支持)
没输出?别往下走。常见原因:NASM 没装、装了但没加进 PATH、或 Windows 下用了 PowerShell 启动 Sublime(它不继承 CMD 的 PATH)。macOS/Linux 用户尤其注意:GUI 启动的 Sublime 不读 ~/.zshrc,必须从终端执行 subl 或 open -a "Sublime Text" 才能拿到环境变量。
写一个能真正工作的 NASM 构建系统(x86-64 Linux/macOS)
新建 Tools → Build System → New Build System…,粘贴以下内容并保存为 NASM_x86_64.sublime-build(存到 Packages/User/):
{
"shell_cmd": "nasm -f elf64 \"${file}\" -o \"${file_path}/${file_base_name}.o\" && gcc \"${file_path}/${file_base_name}.o\" -o \"${file_path}/${file_base_name}\"",
"file_regex": "^(.*?):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.asm, source.nasm"
}
关键点:
- 用
shell_cmd而非cmd数组——自动处理路径空格和引号,nasm和gcc都走 shell 解析 -
selector设为source.asm或source.nasm:确保你当前文件语法高亮是“Assembly”或“NASM”,否则 Ctrl+B 不触发(右下角状态栏要显示对应标识) - 报错行跳转靠
file_regex,NASM 默认报错格式如hello.asm:5: error: …,上面正则能匹配;若用其他汇编器(如yasm),需微调
Windows 下用 NASM + MinGW-w64 生成 EXE
Windows 用户不能直接套用 Linux 版命令,因为 elf64 格式无效,且链接器要用 ld 或 gcc 包装。推荐方案:
- 确保 MinGW-w64 已装,并勾选 “Add to PATH”(安装时)
- 构建系统改用:
shell_cmd值为:nasm -f win64 "${file}" -o "${file_path}/${file_base_name}.obj" & gcc "${file_path}/${file_base_name}.obj" -o "${file_path}/${file_base_name}.exe" - 注意:
&是 JSON 转义,实际写&;.obj后缀比.o更符合 Windows 习惯 - 如果代码含
section .data等,确保 NASM 版本 ≥ 2.15(旧版对 Win64 支持弱)
常见静默失败:路径含中文或空格却没用双引号包裹 "${file}";或者 nasm 输出了 warning 但没 error,Sublime 认为“构建成功”,其实链接阶段被跳过。
为什么 Ctrl+B 运行后一闪而过?怎么调试输入/输出
Sublime 的输出面板是只读的,不支持 scanf、getchar 或任何交互式输入。这不是配置问题,是设计限制。
- 临时解法:在汇编末尾加
call getchar(Linux)或call system调pause(Windows),但得确保 libc 可用且符号导出正确 - 真实工作流:把构建拆成两步——先编译链接生成可执行文件,然后手动去终端运行:
cd /path/to/dir && ./hello(Linux/macOS)或hello.exe(Windows) - 进阶建议:装
Terminus插件,在 Sublime 内嵌终端运行,支持完整交互;但注意它不接管构建系统,仍需先 Ctrl+B 编译,再手动run
最易被忽略的一点:汇编源码的 section 命名和入口符号(_start vs main)必须和所选目标格式严格匹配。用 nasm -f elf64 却写 global main,链接时会报 undefined reference to 'main'——这种错误不会出现在 Sublime 构建日志里,得看完整输出(点开“[Finished]”旁的小箭头展开)。


















