根本原因是dosbox与windows文件系统隔离,.asm文件未被复制进其挂载目录;需先用copy命令将文件复制到dosbox挂载路径(如d:\asm),再通过-noautoexec参数启动并执行编译链。

Notepad++ 调用 DOSBox 执行 TASM/MASM 编译时,为什么总卡在“找不到文件”?
根本原因不是路径写错,而是 DOSBox 里没有看到你的 .asm 文件——它压根没被复制进去。Notepad++ 的“运行”命令是在 Windows 环境下执行的,而 DOSBox 是隔离的模拟环境,两者文件系统不互通。
常见错误现象:
- 执行后 DOSBox 窗口一闪而过,或报错
File not found -
tasm t.asm提示Cannot open source file - 手动进 DOSBox 查
dir,发现 C 盘里确实没有t.asm
正确做法是:先用 Windows 命令把当前文件复制进 DOSBox 挂载目录,再启动 DOSBox 并自动执行编译链。关键点在于「复制时机」和「挂载路径一致性」:
- 确保 DOSBox 的
C:挂载路径(如D:\ASM)和你复制目标路径完全一致 - 用
copy "$(FULL_CURRENT_PATH)" "D:\ASM\t.asm"替代直接引用原路径(避免空格、中文、长文件名触发 DOSBox 解析失败) - 必须加
-noautoexec参数,否则 DOSBox 会先执行配置文件里的命令,干扰你传入的临时指令
如何让 Notepad++ 一键完成 “保存→复制→汇编→链接→运行”?
不能只靠一条命令拼接,得拆成两层:Windows 层负责文件搬运,DOSBox 层负责工具链调用。下面这个命令经实测在 Notepad++ v7.9+ 和 DOSBox 0.74-3 上稳定可用:
cmd /c del D:\ASM\t.* & copy "$(FULL_CURRENT_PATH)" "D:\ASM\t.asm" & D:\DOS\DOSBox.exe -noautoexec -c "mount c D:\ASM" -c "c:" -c "tasm/t/zi t.asm" -c "tlink/v/3 t.obj" -c "t.exe"
说明与要点:
-
del D:\ASM\t.*清掉上一次残留的t.obj/t.exe,避免链接器误用旧目标文件 -
tasm/t/zi中的/t表示生成列表文件(可选),/zi启用调试信息,方便后续用TD调试 -
tlink/v/3的/v输出详细链接过程,/3强制生成 .exe(而非 .com),适配大多数教学例程 - 若用 MASM,把
tasm换成masm,tlink换成link,参数保持一致即可
DOSBox 配置文件 autoexec 区域该写什么?
不是为了省那几秒手动挂载,而是为了确保每次 DOSBox 启动后,C 盘始终指向你的工具链目录——否则 tasm 命令本身都找不到。
打开 dosbox-0.74-3.conf(Windows 路径通常为 C:\Users\[用户名]\AppData\Local\DOSBox\),在文件末尾的 [autoexec] 段内添加:
MOUNT C D:\ASM C:
注意:
- 路径中不能含中文、空格或 Unicode 字符,否则 DOSBox 会静默失败
-
MOUNT命令必须用完整路径,不能用相对路径或环境变量 - 如果同时要用
DEBUG或TD,把它们也放同一目录下,不用额外配置 - 改完保存,重启 DOSBox 生效;若已运行,需关闭再重开,
config -writeconf不会覆盖 autoexec 区域
为什么用 Notepad++ 运行命令后,DOSBox 窗口闪退?
不是代码错了,是 DOSBox 执行完 t.exe 就退出了,没留给你看输出结果的机会。教学汇编程序(比如 int 21h 返回)默认不会停住窗口。
解决方法只有两个,且必须二选一:
- 在汇编源码末尾加暂停逻辑,例如:
mov ah, 8h int 21h(等待任意键),再加int 20h退出 - 把命令末尾的
t.exe换成t.exe && pause,但 DOSBox 不认pause,所以实际要写成:echo.& t.exe & echo.& echo 按任意键退出...& pause
更稳妥的做法是:把 t.exe 改成 debug t.exe,然后在 DEBUG 中用 g 运行,出结果后手动 q 退出——虽然多一步,但能确认程序是否真跑通,而不是靠窗口是否停留来判断。
真正容易被忽略的是:DOSBox 的字符编码默认是 CP437,如果你的 .asm 文件用了 UTF-8 BOM 或 GBK 保存,TASM 会直接报语法错误,连第一行都读不对。务必在 Notepad++ 中用「编码 → 转为 ANSI」再保存。











