实验10 编写子程序
1.显示字符串
子程序描述
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79)
(cl)=颜色,ds:si指向字符串的首地址
返回:无
分析:
在80*25彩色字符模式(B8000H~BFFFFH)下,显示器可以显示25
行(N*A0,N为整数且N≤24),每行80个字符(00~9F),每个字符可
以有256种属性,这样,一个字符在显示缓冲区中就要占两个字节。
因此:dh=(0~24)*A0,dl=(0~79)*2,cl=0~7
源程序如下:
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 ah,4ch
int 21h
show_str:
push ax
push bx
push cx
push dx
push si
push di
mov al,0a0h
mov bl,dh
mul bl ;计算行址
add dl,dl ;计算列址
mov di,0b800h
mov es,di ;显存段址送ES
mov di,ax
mov ah,0
mov al,dl
add di,ax ;计算显存偏移地址
;On computer Line and Col
mov ah,cl
s: mov al,[si] ;字符、属性送AX
mov es:[di],ax
mov ch,0
mov cl,[si]
inc si
add di,2
jcxz ext
loop s
;
ext: pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start
- [yigeling] 不知道你最近在忙什么? 06/16 15:39
- [游客] 太狠了,不提倡这种方式,只要能够学好,一边工作一边学习也无妨啊 哈哈 还有,不是还有两个功能 04/17 10:14
- [wuerlang] 够狠的,呵呵~~ 04/16 22:02
- [younggay] 没问题! 04/16 10:56
- [younggay] 程序运行OK。 04/16 10:55
- [younggay] 程序运行出错。 博主再检查检查程序吧。 04/16 10:54
- [younggay] 程序OK! 不过死循环有点不完美,不过,在后面学习了键盘中断后就能够完善了。 不错,不错! 04/16 10:50
- [younggay] 程序OK。博主一下贴了这么多作业。攒的够辛苦啊。呵呵 04/16 10:46
- [younggay] 确实不错!博主厉害。 04/16 10:44
- [younggay] 兄弟够有魄力,辞职学习汇编,佩服! 呵呵 04/16 10:40
- [fishboy] 修改自己的信息就在你的博客的“最新评论”上有个“详细信息”,进入该界面后,在界面的上方就有个人信息的 10/18 10:22
- [happy] 呵呵,这个重要吗?关键是自己学好了!努力加油吧! 10/16 21:00