在汇编程序8086中删除文件时出现问题



写这篇文章的原因是看看是否可以对这段代码做些什么,发生的事情是,只要创建文件的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。

我已经能够解决如下问题:就在删除文件之前,我打开并关闭了它。

最新更新