利用汇编在80x25彩色字符模式下打印3行不同字符属性的Welcome to masm!字符串

简单介绍

这道题目说真的做的有点久的,不过也很好的可以总结了前面的知识,还是不错的

先看下资料把,资料如下所示
这里写图片描述

这里写图片描述

这里写图片描述

注意:闪烁的效果必须要在全屏的DOS方式下才能看到

编写代码如下

assume cs:codesg,ds:data,ss:stack

data segment
    db 'welcome to masm!';设置数据
    db 02h,24h,71h ;设置颜色    
data ends

stack segment
    db 48 dup(0);设置栈段,因为要用到双重循环,所以需要保存cx等数据
stack ends

codesg segment

start:mov ax, data ;将data段地址给ax
      mov ds,ax     ;将ax给ds
      mov ax,0B800H  ;将显示缓冲区的开始地址给ax
      mov es,ax      ;将ax给扩展段ex
      mov ax,stack   ;将栈段地址给ax
      mov ss,ax      ;将ax赋值给ss段
      mov cx,3        ;第一重循环3次
      mov si,10H      ;给si的就是data中的偏移地址
      mov dx,0B800H   ;给dx的显示缓冲区的开始地址,因为下面需要到下一行打印的时候是需要用到的

s:push cx ;将cx先压栈保存
  push si  ;保存si,下面计算字符属性在data中偏移的时候需要使用
  mov  cx,16 ;设置第二重循环的cx的值
  mov bx,680H ;保存偏移的值也就是让打印的字符显示在屏幕中间需要使用
  mov di,0

s1:
  mov al,[di] ;将ds:[di]的值给al
  mov es:[bx],al ;将al赋值给显示缓冲区当中的低地址的地方
  mov ah,ds:[si]  ;将字符属性给ah
  mov es:[bx+1],ah ;设置字符属性到高地址处
  add bx, 2        ;显示缓冲区偏移两个字节,所以让bx+2
  add di,1         ;字符数据指向下一个字节

  loop s1


  mov dx,es   ;重新要设置es的值
  add dx,0AH   ;dx+0AH其实就是想要让es偏移160个字节到下一行
  mov es,dx    ;dx赋值给es
  pop si       ;出栈把原先的值给si
  inc si       ;si指向下一个字符属性的数据也就是data段中的下一个字符属性字节的数据
  pop cx       ;把cx出栈,下面loop循环将会进行-1

  loop s

  mov ax,4c00h
  int 21h      


codesg ends
end star

效果图
这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值