CPU对所有控件统一编址,而显存的地址空间为 A0000H ~ BFFFFH(128K RAM)
其中 B8000H ~ BFFFFH,共 32K 的空间,是 80 * 25 的彩色字符模式

在8086cpu中屏幕被分为 25行,80列,每个单位存放一个字符数据,一个字符数据需要 2 个字节
所以一行需要 160 个字节

各行所需字节数 显示缓冲区地址范围
160(A0H) B800:0000 ~ B800:009F
160(A0H) B800:00A0 ~ B800:013F
160(A0H) B800:0140 ~ B800:01DF
…… …..
160(A0H) B800:0F00 ~ B800:0F9F

一个字符数据为什么需要 2 个字节呢?
低位字节存放要显示符号的ASCII,高位字节存放显示属性字节
高位字节具体情况:

7 6 5 4 3 2 1 0
BL R G B I R G B
闪烁 背景 背景 背景 高亮 前景 前景 前景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
assume cs:code, ds:data
data segment
db "welcome to masm!"
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0B800H ; 显存地址段
mov es, ax
mov si, 0
mov di, 160*12+80-16 ; 目标显存偏移地址
; 让字符显示在中间行中间列

mov cx, 16
s:mov al, [si]
mov es:[di], al
inc di
mov al, 71H ; 规定字符的显示属性
mov es:[di], al
inc si
inc di
loop s

mov ax, 4c00h
int 21h
code ends
end start