首页 > 解决方案 > 在 Assembler 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。我希望你能帮助我,谢谢。

标签: assemblyx86-16emu8086

解决方案


DOS 函数CREATE OR TRUNCATE FILEDELETE 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;它应该是MOV BX,[HND]


推荐阅读