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

汇编语言调用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

重点修复说明

  1. 加了错误检查:用jc create_fail判断int 21h返回的CF标志,一旦失败就跳去显示错误信息,方便你排查问题
  2. 强制关闭文件:写完内容后调用3Eh功能关闭文件,DOS会把内存缓冲区里的内容刷到磁盘,不然文件可能是空的或者根本不生成
  3. 正确退出程序:用4Ch功能退出DOS,保证程序执行完所有必要操作再结束
  4. 加了测试写入:给你加了写入"Hello World!"的代码,验证文件创建成功后能不能正常写内容

额外要注意的事

  • 先确认C:\Users\myUser\Desktop\io这个目录已经存在!如果没有,手动建一个,或者你得在代码里加创建目录的逻辑(用DOS的39h功能)
  • 如果是在Windows 10/11下运行DOS程序,注意权限问题,别往系统文件夹写,桌面目录一般没问题,但也要确保当前用户有写入权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:07:40