向显存写数据x8086

在内存的地址控件中,B8000H~BFFFFH这段32kb的空间是80x25的彩色字体显示缓冲区,向这个内存中写入数据,写入的内容会立即直接出现在显示器上

在80x25彩色字符模式下,显示器可以显示25行,每行25个字符,每个字符可以有256种属性

那么可以知道的是一个字符在显存中要存放2个一个,一个存放ascii码,一个存放这个字符的属性。

显示缓冲区分为8页,通常情况下显示第0页的内容。和显存中的内存对照后,也就是表示B8000H~B8F9H中的4000个字节的内容将显示在显示器上。

 

在一页的显示缓冲区中,采用对B800段地址的偏移地址来处理

在一页的显示缓冲区中,可以通过数组的样子来用类似与表格的样子来显示

偏移地址对应显示的行数
000~09F 显示器的第一行(一行有80个字符,占160个字节
0A0~13F 第二行
140-1DF 第三行

以此类推

 

 

 1 data segment
 2     db "Maggie"
 3 data ends
 4 code segment
 5     assume cs:code,ds:data
 6 start:
 7     mov dx,11001000B;显示的字体
 8     mov ax,0b800H
 9     mov ds,ax
10     
11     mov ax,data
12     mov es,ax
13     
14     mov bx,0
15     mov si,0
16     mov cx,6
17 loop1:
18     mov ax,es:[bx]
19     mov [bx],ax
20     inc si
21     mov [si],dx
22     inc si
23     inc dx
24     loop loop1
25     
26 code ends
27 end start
View Code

 

 

在一行中,一个字符占了一个字的存储控件,地位地址存放字符的ASCII码,高位存放字符的属性

 

属性的编码格式:

 

 

可以按位来设计属性字节,从而达到不同的背景和颜色

白色采用全为1黑色的话全为0就好

属性属性字节
红底绿字 01000001B
红底闪烁绿字 11000001B
红底高亮绿字 01001001B
黑底白字 00000111B
白底蓝字 01110001B