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

我的博客

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

[2010-09-17 10:56] 习题4.38

图片载入中
编写一个能够显示当前目录下文件指定文件长度的程序。文件名由键盘输入。

答:
;----------------------------------------------------;
assume        cs:code,ds:data,ss:stack
data        segment
fname        db        11 dup (0),0       ;文件名
errmsg1        db        'Open Failue or No Found File$'
errmsg2        db        'Please enter filename.$'
errmsg        db        'Error!!!$'
fsize        db        'bytes$'
data        ends
stack        segment stack              ;定义栈段  
        dw 128 dup (0)
stack        ends
code        segment
start:        
        mov ax,data                ;指定数据段
        mov ds,ax
        cmp byte ptr es:[80h],0    ;检查命令行参数是否为空
        jz err2                    ;如为空则
;开始复制文件名
        mov si,82h                 ;PSP文件名地址
        mov di,offset fname        ;
_read:        mov al,es:[si]
        cmp al,0dh
        jz go
        mov [di],al
        inc si
        inc di
        jmp _read
go:                                ;复制结束
;
        mov ax,3d00h               ;打开文件
        mov dx,offset fname        ;
        int 21h
        jc err1
        mov bx,ax                   ;文件句柄
;
        mov ax,4202h               ;获取文件长度
        int 21h
        xor dx,dx
        jc err1
        
        push ax                    ;文件长度在AX中
;        
        mov ah,3eh                 ;关闭文件
        int 21h
        jc err

        pop ax                     ;恢复AX,显示

        call show
        mov dx,offset fsize        ;显示信息
        mov ah,9
        int 21h
        jmp over
;各种错误信息
err1:                                  
        mov dx,offset errmsg1
        mov ah,9
        int 21h
        jmp over
err2:        
        mov dx,offset errmsg2
        mov ah,9
        int 21h
        jmp over
err:        
        mov dx,offset errmsg
        mov ah,9
        int 21h
over:
        mov ah,4ch            ;返回DOS
        int 21h
;显示子程序
show        proc uses cx
        mov bx,10
        mov si,0
_divdw:
        push ax
        mov ax,dx
        xor dx,dx
        div bx
        mov cx,ax
        pop ax
        div bx
        add dl,30h
        push dx
        inc si
        mov dx,cx
        cmp ax,10
        jb _ok
        jmp _divdw
_ok:
        and ax,0fh
        cmp ax,0
        jz _pop
        add al,30h
        push ax
        inc si
_pop:        
        mov cx,si
_disp:
        pop dx
        mov ah,2
        int 21h
        loop _disp
        ret
show        endp

code        ends
end        start
;----------------------------------------------------;
评论次数(0)  |  浏览次数(327)  |  类型(汇编习题集) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码