必须先设置正确语法高亮再配置构建系统,否则Ctrl+B静默失败;右下角选Assembly(NASM)或x86(GAS),插件禁用时需启用;.s/.S后缀需分别绑定,selector须与实际scope严格匹配;Windows下MASM32需bat中转DOSBox,多文件编译须用外部脚本。

不能直接一键编译,必须先让 Sublime 正确识别汇编文件语法,再配对构建系统,否则 Ctrl+B 会静默失败或报错“no build system”。
汇编文件高亮不生效,Ctrl+B 完全没反应
右下角显示 Plain Text 就说明 Sublime 根本没把当前文件当汇编处理——这不是插件没装,是语法绑定失败。点右下角文字,手动选 Assembly (NASM) 或 x86 (GAS)(注意大小写和空格)。如果菜单里没有这些选项,说明插件被禁用:Ctrl+Shift+P → Package Control: Enable Package → 启用 EnhancedAssembly 或 Assembly Language Support。
特别注意:.s 和 .S 是两个独立后缀,Sublime 不会自动继承规则。.s 文件开头若有 #include,会被判为 ShellScript;临时解法是 Ctrl+Shift+P → Set Syntax: x86 (GAS);永久解法是右键标签页 → Open all with current extension as… → 选对应语法(名称必须完全一致)。
ASM.sublime-build 配置后仍无法运行
构建系统里的 selector 必须与你手动设置的语法 scope 严格匹配。比如你选的是 Assembly (NASM),selector 得写成 source.asm.nasm;若用的是 EnhancedAssembly → x86 (GAS),则 selector 应为 source.gas。不一致会导致 Build 菜单里找不到该项,或 Ctrl+B 直接跳过执行。
常见错误配置示例:
{
"cmd": ["nasm", "-f", "win32", "${file}", "-o", "${file_path}/${file_base_name}.obj"],
"file_regex": "^(.*?):([0-9]+):([0-9]+): (.*)$",
"working_dir": "${file_path}",
"selector": "source.asm", // ❌ 错:太宽泛,不匹配实际语法 scope
"variants": [
{
"name": "Link & Run",
"cmd": ["link", "/subsystem:console", "${file_path}/${file_base_name}.obj", "/out:${file_path}/${file_base_name}.exe", "&&", "${file_path}/${file_base_name}.exe"]
}
]
}
正确做法是先用 Ctrl+Shift+P → Developer: Show Scope Name 确认当前文件的实际 scope,再填进 selector。
Windows 下用 MASM32 编译需绕过 cmd 限制
MS-DOS 16 位工具链(如 ml.exe + link16.exe)无法在现代 Windows 的 PowerShell 或默认 cmd 中直接调用,必须用批处理中转并启动 DOSBox。
推荐做法:
- 在
D:masm32in下新建asm.bat,内容为:@echo off D:masm32inml.exe /c %1.asm D:masm32inlink16.exe %1.obj %1,,,,, D:DOSBox-0.74DOSBox.exe %1.exe
-
ASM.sublime-build中用shell_cmd调用该 bat:"shell_cmd": "D:\masm32\bin\asm.bat "${file_base_name}"" - 务必加
"encoding": "cp936",否则中文路径或错误信息会乱码
注意:ml.exe 默认生成 16 位实模式程序,不能直接在 64 位 Windows 命令行运行——DOSBox 是必须环节,跳过就只能看到黑窗口一闪而过。
多个 ASM 文件链接失败
Sublime 的构建系统默认只处理当前打开的 ${file},不支持自动收集同目录所有 .asm 文件。想实现多文件工程,必须用外部脚本驱动:
- 写一个
build_all.bat,遍历当前目录所有.asm并调用ml.exe /c生成对应.obj - 再用
link16.exe手动列出所有.obj进行链接 -
ASM.sublime-build的cmd改为调用这个 bat,而非单个文件
真正麻烦的不是配置,而是 MASM32 工具链本身不支持增量构建或依赖追踪——每次改一个文件,都得全量重编所有 .asm。这点和现代 C/C++ 构建系统有本质差距,别指望它像 make 那样智能。











