回 帖 发 新 帖 刷新版面

主题:[原创]一个关于文件的问题

一个关于文件的问题
有点问题:单步执行没什么问题,但运行时就有问题
功能为:将一个文己存在的文件的内容复制到一个新建的文件中,其中文件名由自己输入
SSEG        SEGMENT    STACK
        DB        80h  DUP (?)
SSEG        ENDS
DSEG        SEGMENT
ASKFN        DB        'File  Name:$'
FNAME        DB        14,0,14 dup (?)
handle1        dw        ?
handle2        dw        ?
ERRMSG        DB        'FILE  ERROR!$'
BUFF        DB        512  DUP(?)
DSEG        ENDS
CSEG        SEGMENT
                ASSUME  CS:cseg,ds:dseg,ss:sseg
FILE:
        mov        ax,dseg
        mov        ds,ax
        LEA        DX,ASKFN    ;提示信息"file name:"的首地址
        MOV        AH,9        ;显示字符串功能调用号
        INT        21H        ;显示'file name:'
        LEA        DX,FNAME    ;输入缓冲区首地址
        MOV        AH,0AH        ;输入字符串功能号的调用
        INT        21H        
        MOV        DL,0AH        ;换行
        MOV        AH,2
        INT        21H
        MOV        BL,FNAME+1    ;输入字符串的个数
        MOV        BH,0        ;将BL扩展到BX中
        MOV        [BX+FNAME+2],BH    ;文件名的最后放上一个0
        LEA        DX,FNAME+2    ;取文件名的首地址
        MOV        AX,3D00H    ;以读的方式打开指定的文件
        INT        21H        
        JC        EXIT        ;若打开失败则退出
        MOV        handle1,AX    ;送文件号到handle1中保存
                        
        
        LEA        DX,ASKFN    ;提示信息"file name:"的首地址
        MOV        AH,9        ;显示字符串功能调用号
        INT        21H        ;显示'file name:'
        LEA        DX,FNAME    ;输入缓冲区首地址
        MOV        AH,0AH        ;输入字符串功能号的调用
        INT        21H        
        MOV        DL,0AH        ;换行
        MOV        AH,2
        INT        21H
        MOV        BL,FNAME+1    ;输入字符串的个数
        MOV        BH,0        ;将BL扩展到BX中
        MOV        [BX+FNAME+2],BH    ;文件名的最后放上一个0
        mov        [bx+FNAME+3],0
        MOV        [BX+FNAME+4],0
        LEA        DX,FNAME+2    ;取文件名的首地址
        MOV        AX,3c00H    ;创建一个普通文件
        INT        21H        
        JC        EXIT        ;若打开失败则退出
        MOV        handle2,AX    ;送文件号到handle1中保存

AGAIN:         mov        bx,handle1    ;送读文件号到bx中保存
            MOV             CX,512        ;每次读入的字节数
        LEA        DX,BUFF        ;取缓冲区的地址
        MOV        AH,3FH        ;读文件的功能号
        INT        21H        ;读入
        JC        EXIT        ;如果文件出错,转EXIT
        PUSH        AX        ;保存实际读出的字节数

copy:        mov        ah,40h           
        mov        bx,handle2
        pop        cx
        lea        dx,buff
        int        21h
        jc        EXIT    
        cmp        cx,512
        je        again


close1:        mov        bx,handle1
        MOV        AH,3EH        ;读文件关闭
        INT        21H
                    ;结束

close2:        mov        bx,handle2
        mov        ah,3eh
        int        21h
        jmp        stop

EXIT:           LEA             DX,ERRMSG
        MOV        AH,9
        INT        21H
stop:        mov        AX,4c00h
        int        21h        
CSEG        ENDS
        END        FILE



回复列表 (共1个回复)

沙发

楼主看看这个

http://www.lwolf.cn/blog/article.asp?id=8

我来回复

您尚未登录,请登录后再回复。点此登录或注册