内存地址空间种B8000H~BFFFH
共32KB
空间,称为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
运行程序即可看到如下效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)