You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

8086汇编执行INT 21H 3CH创建文件后无法删除问题求助

问题原因分析
  • 寄存器未完整初始化:你仅向BL寄存器写入了输入文件名长度,未清零BH寄存器,导致BX整体值不确定,MOV NMF[BX + 2], ' '操作会写入错误的内存地址,直接破坏文件名结构。
  • 文件名终止符错误:DOS下的文件名字符串要求以ASCII 0(\0)结尾,你将输入结束位置的字符设为了空格,会导致文件名尾部多出无效字符,创建的文件和后续要删除的文件名称不匹配。
  • 无接口调用错误校验:你调用创建文件、关闭文件的中断时都没有校验CF标志位判断调用结果。如果创建文件失败,HND中存储的是错误码而非有效句柄,后续关闭无效句柄的操作会失败,文件处于打开状态时操作系统会持有文件锁,禁止删除操作。

你观察到删除时CF=0且AX=0003属于正常现象:INT 21H的41H删除功能调用成功时CF会置0,此时AX的值属于未定义的历史调用残留值,不是错误码,不需要参考。

修复方案

修正文件名处理逻辑,增加BX清零、终止符改为0,同时补充必要的错误检查即可:

; 若原有代码未初始化数据段,需补充本段保证DS指向数据段
MOV AX, @DATA
MOV DS, AX

;Enter the file name
MOV AH, 0AH 
LEA DX, NMF
INT 21H
; 完整初始化BX,避免高8位残留值
XOR BX, BX
MOV BL, NMF[1]
; 文件名末尾补0而非空格
MOV NMF[BX + 2], 0

;Create the file
MOV AH, 3CH  
MOV CX, 0H  
LEA DX, NMF + 2 
INT 21H
; 校验创建是否成功
JC CREATE_FAILED
MOV HND, AX

;Close the file
MOV AH, 3EH
MOV BX, HND
INT 21H
; 校验关闭是否成功
JC CLOSE_FAILED

;Delete the file
MOV AH, 41H
LEA DX, NMF + 2 
INT 21H
JC DELETE_FAILED

CREATE_FAILED:
CLOSE_FAILED:
DELETE_FAILED:
; 可在上述分支自行添加错误处理逻辑,比如打印错误提示

原有变量定义无需修改:

NMF DB 100 DUP(' '), 0
HND DW 0

内容的提问来源于stack exchange,提问作者Sebastian Zarate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 14:45:01