王爽《汇编语言》第三版 第十章 实验十(显示字符串)

1、显示字符串

问题
显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能、我们应该提供最灵活的调用接口
,使调用者可以决定显示的位置(行和列)、内容和颜色
子程序描述
名称:show_str
功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0-79),
(cl)=颜色,ds:si指向字符串的首地址
返回:无
应用举例:在屏幕的8行3列,用绿色显示data段中的字符串

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:   :
            :
            :
code ends

end start

完整代码如下:

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:push ax
		 push bx
		 push cx
		 push dx
		 push es
		 push si
		 push di
		  
		 mov ax, 0B800h
		 mov es, ax
		 
		 ;初始化显示字符首地址
		 mov al, 160;每行占80个字符,共160个字节
		 mov bl, dh
		 dec bl
		 mul bl
		 mov bx, ax
		 
		 ;偏移量,三列 即从第三个字符(第六个字节)开始显示
		 mov al, 2
		 dec dl
		 mul dl
		 add bx, ax
		 
		 mov di, 0
		 mov al, cl		 
		 call change
		 
change:	 mov cl, [si]
		 mov ch, 0
		 jcxz ok
		 mov ch, al
		 mov es:[bx + di], cx
		 inc si
		 add di, 2
		 jmp short change
		
		;出栈顺序与进栈顺序相反
	ok:	 pop di
		 pop si
		 pop es
		 pop dx
		 pop cx
		 pop bx
		 pop ax
		 ret
code ends

end start

运行截图:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值