8086汇编(7、80x25彩色缓冲区)

内存地址空间种B8000H~BFFFH32KB空间,称为80x25彩色字符模式显示缓冲区,向这个地址写入的数据会立即出现在显示器上。显示缓冲区分为8页,每页4KB(约等于4000B),显示器可以显示任意一页的内容,一般情况下显示第0页的内容。
讲的通俗点如下:
在这里插入图片描述

即,如上窗口大小为160x25个字节(4000个字节),每两个字节为一个字符,偶数地址存放字符的ascii码,奇数地址存放字符属性,也就是一行可以存放80个字符一共25行,共可以存放80x25个字符2000个字符。每个字符可以有FF=2^8=256种属性.

0 0 0 0 0 0 0 0 属性占用一个字节共8
7 6 5 4 3 2 1 0

  • 7位代表闪烁效果
  • 6、5、4位代表背景色的rgb=red green blue 红绿蓝
  • 3 高亮
  • 2、1、0 位字符颜色的rgb
    对应颜色设置成1就变成对应颜色
    0010 0100 绿底红字 十六进制 =24
    0100 0001 红底蓝字 十六进制 =41
    0001 0010 蓝底绿字 十六进制=12
    下面我们来写个简单的用例,首先清理屏幕然后再整个屏幕填充白底黑字0
DATAS SEGMENT
	
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    call clear_screen
    call show_str
    MOV AH,4CH
    INT 21H
;=============================================
show_str:
	mov bx,0B800H
	mov es,bx
	;偶数字节为字符,奇数字节为属性
	mov bx,0
	mov cx,2000			;整个屏幕为2000个字符,每个字符2个字节
showStr:
	mov ax,30H              ;30H为ascii 0
	mov es:[bx+0],ax		;把字符给偶数字节   
	mov ax,01110000B		;白底黑字
	mov es:[bx+1],ax		;把白底黑字的属性给奇数字节
	add bx,2				;每循环一次bx+2
	loop showStr	
	ret    
;=============================================
clear_screen:
	mov bx,0B800H     
	mov es,bx
	mov bx,0            ;定义数据要写到哪里去,0B800为显存开始位置
	mov dx,01110000B     ;01110000B 白底黑字,没有字就是啥都不显示
	mov cx,2000 		;循环2000次
clearScreen:	        ;每次循环把颜色填入对应的位置
	mov es:[bx],dx
	add bx,2
	loop clearScreen
	ret
CODES ENDS
    END START

运行程序即可看到如下效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值