需确保masm32和DOSBox已正确安装并加入PATH,asm.bat须用绝对路径且无空格,Sublime构建系统需设"encoding":"cp936"及匹配MASM错误格式的file_regex,并切换语法模式为x86 Assembly。

确认 masm32 和 DOSBox 已正确安装并可命令行调用
Sublime Text 本身不编译汇编,它只负责把 $file_base_name 传给你的批处理脚本,再由脚本调用 ml.exe 和 link16.exe。所以第一步不是改 Sublime 配置,而是确保在 CMD 里能直接运行这些工具:
- 打开 CMD,输入
ml,应显示 Microsoft (R) Macro Assembler 版本信息;否则说明D:masm32in没进 PATH,或安装路径含空格/中文(比如C:Program Filesmasm32就不行) - 同理,
link16和DOSBox也要能直接敲命令启动;DOSBox 建议装到无空格路径如D:DOSBox-0.74,避免cmd /c解析失败 - 若用的是 NASM 或 FASM,配置逻辑相同,但构建系统里要换掉
ml.exe和link16.exe,且注意输出目标格式(如-f win32)
asm.bat 必须用绝对路径且禁止空格,否则 link 失败
你在 D:masm32in 下建的 asm.bat 是关键中转层。Windows 的 cmd 对路径空格极其敏感,而 link16.exe 又不支持引号包裹参数——这是多数人卡住的地方:
- 批处理内容必须写死绝对路径,例如:
@echo off D:masm32inml.exe /c %1.asm D:masm32inlink16.exe %1.obj %1,,,,, D:DOSBox-0.74DOSBox.exe %1.exe - 不能写成
"D:Program Filesmasm32inml.exe",也不能让%1展开后带空格(比如文件名是hello world.asm,$file_base_name会变成hello world,link 直接报错) - 如果必须处理多文件链接,得在 bat 里用
for循环预编译所有.asm,再统一link16,不能依赖 Sublime 单次传入一个文件名
ASM.sublime-build 的 encoding 和 file_regex 要匹配 MASM 错误格式
MASM 报错默认用 GBK(Windows 控制台编码),而 Sublime 默认 UTF-8,不设 encoding 会导致错误行无法高亮定位:
-
"encoding": "cp936"必须显式写上,否则file_regex匹配不到Error A2008: syntax error : xxx这类中文环境下的提示 -
"file_regex": "^[ ]*File"(*?)", line ([0-9]*)"是为 MASM 输出定制的——它匹配形如File "main.asm", line 12:的前缀,不是通用正则;NASM 用的是^([^:]*):([0-9]+):([0-9]+):,别混用 -
"selector": "source.asm"要求你当前文件语法必须设为 “x86 and x86 Assembly”(通过右下角点击切换),否则 Ctrl+B 根本不会触发这个构建系统
Run_ASM 变体不能直接执行 .exe,得靠 DOSBox 启动
Windows 下双击生成的 .exe 会闪退,因为 MASM 生成的是 16 位实模式程序,现代 Windows 不支持直接运行。所以构建系统里的 "Run_ASM" 变体本质是启动 DOSBox 并载入程序:
-
"cmd": ["D:\masm32\bin\asm.bat","$file_base_name"]中的asm.bat最后一行必须是DOSBox.exe %1.exe,不能改成start %1.exe - 不要试图在 Sublime 输出面板里跑 DOSBox 程序——它需要完整控制台 I/O,输出面板不支持
stdin输入,也不兼容实模式中断调用 - 如果 DOSBox 启动后黑屏或报
Program not found,检查asm.bat里link16.exe是否成功生成了.exe,以及 DOSBox 的mount是否自动挂载了当前目录(默认是挂的,但自定义配置可能关掉)
实际调试时最常漏掉的是:asm.bat 没给执行权限(Windows 一般不用管)、DOSBox 版本太新(0.74 最稳)、或者 Sublime 当前文件没切到 x86 Assembly 语法模式——这三个点任意一个不对,Ctrl+B 就静默失败,连错误提示都不会出来。











