8086汇编显示字符串

做了题目也总结一下,如下所示
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

程序如下所示

assume cs:code,ss:stack,ds:data
data segment
    db 'Welcome to masm!',0
data ends

stack segment
        db 48 dup (0)
stack ends

code segment
    start:mov dh,8 ;代表第8行
          mov dl,3 ;代表第3列
          mov cl,2 ;设置cl为2就是绿色字符属性
          mov ax,data ;设置数据段的地址
          mov ds,ax

          mov ax,stack ;设置栈段
          mov ss,ax
          mov sp,48 ;设置sp

          mov si,0 ;设置si
          call show_str ;调用show_str

          mov ax,4c00h ;结束程序
          int 21h

     show_str:push cx
              push dx
              mov bx,0b800h ;设置为显存地址
              mov es,bx     ;移动到扩展段

              mov al,160 ;160个字节一列
              sub dh,1   ;8行开始地址为160*7所以减1
              mul dh      ;乘7
              mov di,ax   ;设置di为ax

              sub dl,1  ;dl减1就为第二列开始处
              mov al,2  ;列中以2个字节为一组数据高地址是字符属性
              mul dl    ;让al乘dl,结果保存在ax中
              add di,ax ;添加列的偏移地址

              mov dh,cl ;存放字符的属性

            s: mov cl,ds:[si] ;给字符数据给cl
               mov ch,0 ;将ch设置为0

               jcxz ok ;如果cx为0了,也就是遇到最后一个字符串了就跳出来了

               mov dl,cl ;将字符数据给dl

               mov es:[di],dx ;设置dx给显存地址区域,dx中包含了字符属性和字符数据

               inc si ;字符数据往后偏移

               add  di,2 ;di加2就是到下一个显存地址处以两个字节为一轮


               loop s ;循环

            ok:pop dx ;dx寄存器出栈也就是保存的8行和3列数据出栈
               pop cx ;cx出栈
               ret
code ends
end start

执行结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值