int 21h 3CH文件的创建不是会覆盖原文件的么(同名)?貌似第一次可以覆盖,第二次就不能覆盖了,是否int21 3ch 有延时的问题呢?导致没执行完文件的关闭,就跳过了创建的指令呢?以至于不能覆盖。 麻烦回答下!谢谢
还有没有什么办法能让文件长度置零呢?谢谢告知。
[code=Assembly]
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
FILENAME DB 'file_mr.txt',0
HANDLE DW 0
BUFFER DB 6,7 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET FILENAME
CALL FILE_CREATE ;如果当前目录有 file_mr.txt 则覆盖,即文件长度为零
CALL FILE_OPEN
MOV HANDLE,AX
MOV BX,HANDLE
;在输入前,可在磁盘上看见file_mr.txt容量为0 kb
CALL INPUT ;则可以实现每次输入file_mr.txt文件长度为零
CALL ENTER
CALL FILE_W
CALL FILE_CLOSE
JMP START ;无限对文件置零
CODE ENDS
;----------------------------------
ENTER PROC ;回车换行
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
INT 21H
RET
ENTER ENDP
;----------------------------------
INPUT PROC ;input data
MOV AH,10
LEA DX,BUFFER
INT 21H
RET
INPUT ENDP
;----------------------------------
FILE_CREATE PROC ;CREATE FILE
MOV AH,3CH
MOV CX,0
INT 21H
RET
FILE_CREATE ENDP
;----------------------------------
FILE_OPEN PROC ;OPEN FILE
MOV AH,3DH
MOV AL,2
INT 21H
RET
FILE_OPEN ENDP
;----------------------------------
FILE_W PROC ;WRITE FILE
MOV CX,5
LEA DX,[BUFFER+2]
MOV AH,40H
INT 21H
RET
FILE_W ENDP
;----------------------------------
FILE_CLOSE PROC ;CLOSE FILE
MOV BX,HANDLE
MOV AH,3EH
INT 21H
RET
FILE_CLOSE ENDP
END START
[/code]
为什么只有刚启动可执行程序的时候才会置零呢?
在JMP后执行第二次时,为什么文件不置零呢?
麻烦高手告知,谢谢。 |