【问题标题】:Problem deleting a file in Assembler 8086在 Assembler 8086 中删除文件时出现问题
【发布时间】:2021-10-25 14:29:44
【问题描述】:

这篇文章的原因是看看是否可以对这段代码做些什么,发生的情况是,只要创建文件的 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。我希望你能帮帮我,谢谢。

【问题讨论】:

    标签: assembly x86-16 emu8086


    【解决方案1】:

    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]

    【讨论】:

    • 我已经尝试过了,但它也不起作用,但我能够以在删除文件之前打开和关闭它的方式解决它。仍然感谢您抽出宝贵时间回答 c:
    【解决方案2】:

    我已经能够通过以下方式解决它:就在删除文件之前,我打开并关闭了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2011-08-24
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      相关资源
      最近更新 更多