80X25彩色字符模式显示缓冲区与使用

一、实验基本原理:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

(资料来源:王爽老师《汇编语言》第九章:转移指令的原理实验九)

二、实验:

在屏幕中间分别显示黑底绿字、绿底红字、白底蓝字的字符串“weclcome to masm!”
代码如下:

;Author:Kangruojin
;Time:20175123:39:12
;Mail:mailbox_krj@163.com
;Version:V1.1

;主要知识点:
;高位字节:BL(闪烁)、E、G、B(背景)、I(高亮)、R、G、B(前景)
;B8000~BFFFF总共32K,分为8页,一页4K,在任意一页上写都可以

;第1页:B8000~B8F9F
;我们采用10~12行三行
;第十行:B8640~B86DF
;第十一行:B86E0~B877F
;第十二行:B8780~B881F

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

data segment
       ;0123456789ABCDEF
    db 'welcome to masm!'   ;16个字符
    db 00000010B    ;黑底绿字
    db 01110001B    ;白底蓝字
    db 00100100B    ;绿底红字
    ;db 10001111B   ;黑底白字高亮闪烁
    ;db 11011111B   ;紫底白字高亮闪烁
data ends

stack segment
    db 16 dup (0)
stack ends

codeseg segment
    start:
        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,0B864H   ;第十行起始位置
        mov es,ax

        mov bx,30*2 ;从第30个字符开始
        mov cx,3    
        mov bp,16   

        loop_line:
            push cx
            mov si,0
            mov di,0
            mov cx,16
            loop_color:
                mov al,ds:[si]
                mov es:[bx][di],al  ;写ASCII码
                mov ah,ds:[bp]
                mov es:[bx][di+1],ah    ;写属性
                inc si      ;数据段下标后移一个
                add di,2    ;写完一个,移动两个字节
            loop loop_color
            pop cx
            add bx,80*2 ;换下一行
            inc bp  ;下一行换下一个属性
        loop loop_line

        mov ax,4C00H
        int 21H
codeseg ends
end start

结果显示:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值