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

8086汇编(7、80x25彩色缓冲区),第1张

内存地址空间种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

运行程序即可看到如下效果

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563505.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存