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

我的博客

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

[2011-03-17 15:59] 使用命令行参数读文本文件

图片载入中
;使用命令行参数读文本文件1-4.exe 1-4.asm
assume        cs:code
data        segment
fname1        db        128        dup (?)
error        db        'File not found!','$'
error1        db        'Reading error','$'
buffer        db        512        dup (?)
data        ends
code        segment
start:        push        es
        pop        ds
        cld                ;清方向标志符DF,即正方向
        mov        si,80h        ;PSP段的偏移80h处含参数长度(字节数),81h处开始存放参数
        lodsb                
        mov        cl,al
        xor        ch,ch        ;CX含命令行参数个数
        mov        ax,data
        mov        es,ax
        mov        di,offset fname1
s:        lodsb
        cmp        al,20h
        jz        s
        dec        si
        rep        movsb
        mov        BYTE ptr es:[di-1],0                ;参数传递完毕,补0形成字符串
        push        es
        pop        ds
        mov        dx,offset fname1
        mov        ax,3d00h                        ;只读方式打开
        int        21h
        jnc        open_ok                                ;CF=0,打开成功
        mov        si,offset error
        call        dmess
        jmp        over
open_ok:mov        bx,ax                                ;保存句柄
cont:        call        ready
        jc        err1
        call        putch                                ;显示
        cmp        cx,512        
        jb        clos
        jmp        cont
err1:        mov        si,offset error1
        call        dmess
clos:        mov        ah,3eh                                ;关闭文件
        int        21h
over:        mov        ax,4c00h
        int        21h

ready:        mov        cx,512                                ;读的字节数
        mov        dx,offset buffer                ;ds:dx指向缓冲区首地址
        mov        ah,3fh                                ;读
        int        21h
        jc        read1                ;cf=1读出错,转
        mov        cx,ax
        clc
read1:        ret

putch:        push        dx
        push        cx
        mov        cx,ax
        mov        si,offset buffer
s1:        lodsb
        mov        dl,al
        mov        ah,2
        int        21h
        loop        s1
        pop        cx
        pop        dx
        ret
dmess:        push        dx
        mov        dx,si
        mov        ah,9
        int        21h
        pop        dx
        ret
        
        mov        ax,4c00h
        int        21h
code        ends
end        start
评论次数(0)  |  浏览次数(900)  |  类型(章节要点) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码