写这篇文章的原因是看看是否可以对这段代码做些什么,发生的事情是,只要创建文件的3CH函数是用INT 21H执行的,我就不能删除文件,因为我测试并删除了创建文件的中断执行,如果我直接将文件名放入NMF,删除是否有效,当我再次尝试用NMF中的直接名称执行创建中断时,它停止工作。
;Enter the file name
MOV AH, 0AH
LEA DX, NMF
INT 21H
MOV BL, NMF[1]
MOV NMF[BX + 2], ' '
;Create the file
MOV AH, 3CH
MOV CX, 0H
LEA DX, NMF + 2
INT 21H
MOV HND, AX
;Close the file
MOV AH, 3EH
MOV BX, HND
INT 21H
;Delete the file
MOV AH, 41H
LEA DX, NMF + 2
INT 21H
NMF和HND定义如下。
NMF DB 100 DUP(' '), 0
HND DW 0
值得一提的是,在启动删除文件的中断时,CF=0和AX=00003,所以我不知道这是否是一个错误,因为CF不是1。我希望你能帮助我,谢谢。
DOS函数CREATE OR TRUNCATE FILE和DELETE FILE在DS:DX中需要一个以零结尾的文件名,但您提供了一个以空格结尾的名称:
MOV BL, NMF[1]
MOV NMF[BX + 2], ' '
应该是
MOVZX BX,[NMF+1] ; Load BX with the filename size.
MOV [NMF+BX+2],BH ; Zero-terminate the filename (using BH=0).
指令MOV BX, HND
用为句柄而不是句柄本身保留的存储器变量的偏移量加载BX;它应该是CCD_ 2。
我已经能够解决如下问题:就在删除文件之前,我打开并关闭了它。