. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->汇编语言学习交流区
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  文件的操作(在线等)  [待解决] 回复[ 0次 ]   点击[ 252次 ]  
mr_z
[帖 主]   [ 发表时间:2010-06-21 14:36 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-03-26 16:06
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后执行第二次时,为什么文件不置零呢?
麻烦高手告知,谢谢。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved