汇编语言调用int 21h创建文件失败求助:无报错但文件未生成
搞定DOS汇编文件创建失败的问题
嘿,我仔细看了你的汇编代码,发现几个导致文件没生成的关键问题,咱们一步步梳理并修复:
问题出在哪?
你调用了DOS中断int 21h的3Ch功能来创建文件,但忽略了几个DOS编程的核心细节:
- 没做错误检查:调用
3Ch后,AX里返回的是文件句柄(成功)或者0FFFFh(失败),你直接存到handler但压根没判断是否失败,连问题出在哪都没法排查 - 路径里的目录可能不存在:DOS的
3Ch功能不会自动创建不存在的目录,如果C:\Users\myUser\Desktop\io这个文件夹还没建,文件肯定创建失败 - 程序没正确退出DOS:代码直接
end start,没调用DOS的退出功能(int 21h的4Ch),可能程序还没把文件缓冲区的内容写到磁盘就异常退出了,自然看不到文件
修正后的完整代码
.model small .stack 100 .data filePath db "C:\Users\myUser\Desktop\io\name.txt",0 handler dw ? errMsg db "Failed to create file!$" msg db "Hello World!$" ; 测试写入的内容 .code START: mov ax,@data mov ds,ax ; 调用DOS功能创建文件 mov ah, 3ch mov cx, 0 ; 文件属性设为普通文件 mov dx, offset filePath int 21h ; 检查创建是否成功:CF标志置位就是失败 jc create_fail mov handler, ax ; 成功的话保存文件句柄 ; 可选:往文件里写点测试内容 mov ah, 40h mov bx, handler mov cx, 12 ; 要写入的字节数("Hello World!"是12个字符) mov dx, offset msg int 21h ; 必须关闭文件!否则缓冲区内容可能不会写到磁盘 mov ah, 3eh mov bx, handler int 21h ; 正常退出DOS程序 mov ah, 4ch int 21h ; 错误处理流程 create_fail: ; 显示错误提示 mov ah, 09h mov dx, offset errMsg int 21h ; 带错误码退出 mov ah, 4ch mov al, 01h int 21h end start
重点修复说明
- 加了错误检查:用
jc create_fail判断int 21h返回的CF标志,一旦失败就跳去显示错误信息,方便你排查问题 - 强制关闭文件:写完内容后调用
3Eh功能关闭文件,DOS会把内存缓冲区里的内容刷到磁盘,不然文件可能是空的或者根本不生成 - 正确退出程序:用
4Ch功能退出DOS,保证程序执行完所有必要操作再结束 - 加了测试写入:给你加了写入"Hello World!"的代码,验证文件创建成功后能不能正常写内容
额外要注意的事
- 先确认
C:\Users\myUser\Desktop\io这个目录已经存在!如果没有,手动建一个,或者你得在代码里加创建目录的逻辑(用DOS的39h功能) - 如果是在Windows 10/11下运行DOS程序,注意权限问题,别往系统文件夹写,桌面目录一般没问题,但也要确保当前用户有写入权限
内容的提问来源于stack exchange,提问作者Tess
相关产品推荐
相关产品推荐

