MASM致命错误:unmatched blocked nesting : DELETE 问题求助
MASM编译错误:unmatched blocked nesting : DELETE 排查与修复
错误原因
- 你同时混用了传统段定义语法(
DELETE SEGMENT/DELETE ENDS)和简化段伪指令(.model、.DATA、.CODE),这两种语法不能在同一段代码中混用。MASM会把简化段指令识别为传统段内部的嵌套块,从而触发段嵌套不匹配的错误,哪怕修改段名也无法解决。 - 额外冲突:
org 0100h是COM程序专用的定位指令,而你搭配了.model small(对应EXE程序),两者逻辑不兼容。
修复方案
方案1:用简化段伪指令编写EXE程序
这是MASM中更常用的写法,适合初学者:
.model small .stack 100h .DATA filename db 'FILE1.txt', 0 success_msg db 'File deleted successfully', 0DH, 0Ah, '$' error_msg db 'File deletion unsuccessful', 0DH, 0Ah, '$' .CODE Start: mov ax, @DATA mov ds, ax ; 调用DOS删除文件功能 mov ah, 41h lea dx, filename int 21h ; 检查错误标志 jc error ; 显示成功提示 mov ah, 09h lea dx, success_msg int 21h jmp exit error: ; 显示错误提示 mov ah, 09h lea dx, error_msg int 21h exit: mov ah, 4Ch int 21h END Start
方案2:用传统段定义编写COM程序
COM程序要求所有段合并为一个,且必须加org 0100h:
DELETE SEGMENT assume cs:DELETE, ds:DELETE, ss:DELETE org 0100h Start: ; COM程序中DS、CS、SS默认指向同一段,无需手动初始化DS ; 调用DOS删除文件功能 mov ah, 41h lea dx, filename int 21h ; 检查错误标志 jc error ; 显示成功提示 mov ah, 09h lea dx, success_msg int 21h jmp exit ; 数据必须放在代码之后(COM程序要求) filename db 'FILE1.txt', 0 success_msg db 'File deleted successfully', 0DH, 0Ah, '$' error_msg db 'File deletion unsuccessful', 0DH, 0Ah, '$' error: ; 显示错误提示 mov ah, 09h lea dx, error_msg int 21h exit: mov ah, 4Ch int 21h DELETE ENDS END Start
编译说明
- EXE程序编译命令:
masm yourfile.asm; link yourfile.obj; - COM程序编译命令:
masm /t yourfile.asm;(/t参数直接生成COM格式文件)
内容的提问来源于stack exchange,提问作者Michael Bryan
相关产品推荐
相关产品推荐

