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

我的博客

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

[2010-09-16 23:25] 习题4.37

写一个程序,把内存区最低端的1K字节作为256个双字,依次把每个双字转换为对应的8字节十六进制ASCII码,顺序存放到文件mem.txt。每存放一个8字节ascii码,再存放回车和换行。

答:
;----------------------------------------------------;
assume        cs:code,ds:data,ss:stack
data        segment
buffer        dw        2048 dup (0)     ;定义缓冲区
tmpbuf        db        10 dup (0)       ;定义临时缓冲区
fname        db        "mem.txt",0      ;文件名
errmsg        db        "Error!$"        ;错误信息
data        ends
stack        segment stack            ;栈段
        dw 128 dup (0)
stack        ends
code        segment
start:
        mov ax,data              ;数据段
        mov ds,ax
        mov ax,0
        mov es,ax                ;附加段
        mov si,0                 ;附加段首地址
        mov di,0                 ;数据段首地址
        mov cx,256               ;循环次数
        xor ax,ax                ;清零AX
_read:                                 ;开始读取
        push cx                  ;保存主计数器
        mov cx,2                 ;
_in:        
        mov ax,es:[si]
        xchg al,ah               ;将asc内容高低对调
        call b2asc               ;调用子程序
        mov [di],ax              ;低16位结果
        mov [di+2],dx            ;高16位结果
        add si,2                 ;指针指向下一字单元
        add di,4                 ;
        loop _in
        pop cx                   ;恢复主计数器
        mov word ptr [di+6],0d0ah;附加回车和换行符
        add di,2                 ;目标地址后移一个字
        loop _read
;读入缓冲区结束,开始创建文件
        mov ah,3ch
        mov dx,offset fname
        mov cx,0
        int 21h
        jc err
        mov bx,ax                ;句柄
;打开文件
        mov ax,3d02h
        mov dx,offset fname
        int 21h
        jc err
;将缓冲区内容写入文件
        mov ah,40h
        mov cx,2048
        mov dx,offset buffer
        int 21h
        jc err
;关闭文件
        mov ah,3eh
        int 21h
        jmp over
err:        
        mov dx,offset errmsg
        mov ah,9
        int 21h
over:        mov ah,4ch
        int 21h
;子程序
;BCD->ASC转换
b2asc        proc uses bx cx
        mov cx,4
        mov bx,offset tmpbuf
b1:        push cx
        mov cx,4
        rol ax,cl
        push ax
        and ax,0fh
        cmp al,9
        ja zm
        add al,30h
        jmp jx
zm:        add al,37h
jx:        mov [bx],al
        inc bx
        pop ax
        pop cx
        loop b1
        mov ax,[bx-4]
        mov dx,[bx-2]
        ret
b2asc        endp

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