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

我的博客

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

[2009-06-21 22:24] 实验10    编写子程序

花了几个小时才搞定,拿出来分享下,如有不好的地方请指出。
assume cs:code

data segment
        db 'Welcome to masm!',0
data ends

code segment
start:        mov dh,8
        mov dl,3
        mov cl,2
        mov ax,data
        mov ds,ax
        mov si,0
        call show_str

        mov ax,4c00h
        int 21h
show_str:mov ax,0b800h
        mov es,ax
s:        mov al,[si]
        mov es:[bx+0466h],al
        inc si
        inc bx
        mov ax,7ah
        mov es:[bx+0466h],ax
        inc bx
        mov cx,[si]
        inc cx
        loop s
        ret
code ends

end start

不是太长,我就不注解了。
评论次数(3)  |  浏览次数(584)  |  类型(汇编作业) |  收藏此文  | 

[  wsrf   发表于  2009-06-22 10:59  ]

你的子程序只能在一个固定的行和列位置显示,根本就不符合要求。行和列是由dh和dl中的值来决定的。并且进入子程序的起始代码应该首先保存好现场,以便返回主程序后子程序中用到的各寄存器能够保持原来值不变。

[  游客   发表于  2009-06-22 22:06  ]

哦,是这样啊,我都还不知道它给出dh和dl是干什么的呢。
我把它改正好了:
assume cs:code

data segment
        db 'Welcome to masm!',0
data ends

code segment
start:        mov dh,8
        mov dl,3
        mov cl,0cah
        mov ax,data
        mov ds,ax
        mov si,0
        call show_str

        mov ax,4c00h
        int 21h
show_str:mov ax,0a0h
        dec dh
        mul dh
        mov bx,ax
        mov al,2
        mul dl
        sub ax,2
        mov di,ax
        mov ax,0b800h
        mov es,ax
        mov dl,cl
s:        mov al,[si]
        mov es:[bx+di],al
        inc si
        mov es:[bx+di+1],dx
        add di,2
        mov cx,[si]
        inc cx
        loop s
        ret
code ends

end start

[  游客   发表于  2009-06-23 16:23  ]

呵呵。这次好多了。多理解题目的意思。后面还有两个子程序呢,做了之后,就可以运用到课程设计1中了,要仔细做啊。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码