寫這篇文章的原因是想看看是否可以對這段代碼做些什么,結果是我不能洗掉檔案,只要創建它的 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。我希望你能幫助我,謝謝。
uj5u.com熱心網友回復:
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;應該是MOV BX,[HND]。
uj5u.com熱心網友回復:
我已經能夠按如下方式解決它:就在洗掉檔案之前,我打開并關閉了它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338682.html
