汇编网首页登录博客注册
yang5731的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
友情链接

[2011-03-18 18:43] 文件合并

;使用命令行参数合并文本文件。1-5.exe 文件1 文件2
assume        cs:code,ds:data
data        segment
fname1        db        128        dup (?)
fname2        db        128        dup (?)
fhand1        dw        0
fhand2        dw        0
error        db        'File not found!','$'
error1        db        'Reading error!','$'
error2        db        'Required parameter missing!','$'
error3        db        'writing error!','$'
error4        db        'file num wuxiao!','$'
buffer        db        512        dup (?)
data        ends
code        segment
start:         push        es
        pop        ds        ;ds指向PSP段
        cld                ;清方向标志符DF,即正方向
        mov        si,80h        ;PSP段的偏移80h处含参数长度(字节数),81h处开始存放参数
        lodsb
        or        al,al        ;是否有参数
        jnz        getfid        ;有就转
        mov        ax,data
        mov        ds,ax
        mov        si,offset error2
        call        dmess
        jmp        over
getfid:        mov        cl,al
        xor        ch,ch        ;CX含命令行参数字节数
        mov        di,si                ;ES:DI的字符串中是否有空格
        mov        al,20h
        repnz        scasb
        push        di
        mov        bx,cx
        repnz        scasb
        sub        bx,cx
        mov        ax,data
        mov        es,ax                ;ES指向DATA段
        mov        si,di
        mov        di,offset fname2
        rep        movsb                ;DS:SI是源串,ES:DI是目的串
        xor        al,al
        stosb
        mov        cx,bx
        dec        cx
        pop        si
        mov        di,offset fname1
        rep        movsb
        xor        al,al
        stosb
        mov        ax,data
        mov        ds,ax
        mov        dx,offset fname1
        mov        ax,3d01h                ;写方式打开文件1
        int        21h
        jnc        open_1
        mov        si,offset error
        call        dmess
        jmp        over
open_1:        mov        fhand1,ax                ;保存文件1句柄
        mov        dx,offset fname2
        mov        ax,3d00h                ;读方式打开文件2
        int        21h
        jnc        open_2
        mov        bx,fhand1                ;打开文件2出错,关闭文件1
        mov        ah,3eh
        int        21h
        mov        si,offset error
        call        dmess
        jmp        over
open_2:        mov        fhand2,ax                ;保存文件2句柄
        mov        bx,fhand1
        xor        cx,cx
        xor        dx,dx
        mov        ax,4202h                ;将文件1的指针移动到文件尾
        int        21h
        jc        wuxiao
cont:        mov        dx,offset buffer                ;ds:dx指向缓冲区首地址
        mov        cx,512                                ;读的字节数
        mov        bx,fhand2                        ;读文件2
        mov        ah,3fh
        int        21h
        jc        rerr
        mov        cx,ax
        mov        bx,fhand1                        ;写入文件1
        mov        ah,40h
        int        21h
        jc        rerr
        cmp        ax,512
        jb        clos
        jmp        cont
wuxiao:        mov        si,offset error4
        call        dmess
        jmp        clos
werr:        mov        si,offset error3
        call        dmess
        jmp        clos
rerr:        mov        si,offset error1
        call        dmess
clos:        mov        bx,fhand1
        mov        ah,3eh                                ;关闭文件
        int        21h
        mov        bx,fhand2
        mov        ah,3eh
        int        21h
over:        mov        ax,4c00h
        int        21h

dmess:        push        dx
        mov        dx,si
        mov        ah,9
        int        21h
        pop        dx
        ret
code        ends
end        start
评论次数(0)  |  浏览次数(848)  |  类型(章节要点) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码