编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 ‘welcome tomasm!’。
80x25彩色字符模式显示缓冲区(以下简称为显示缓冲区)的结构:
内存地址空间中,B8000H~BFFFFH共 32KB的空间,为80×25彩色字符模式的显示缓冲区。向这个地址空间写入数据,写入的内容将立即出现在显示器上。
在80x25彩色字符模式下,显示器可以显示25行,每行80个字符,每个字符可以有256种属性(背景色、前景色、闪烁、高亮等组合信息)。
这样,一个字符在显示缓冲区中就要占两个字节,分别存放字符的ASCII码和属性。80×25模式下,一屏的内容在显示缓冲区中共占4000个字节。
显示缓冲区分为8页,每页4KB(≈4000B),显示器可以显示任意一页的内容。一般情况下,显示第0页的内容。也就是说通常情况下,B8000H ~ B8F9FH中的4000个字节的内容将出现在显示器上。
实验实现代码
assume cs:code
data segment
db 'welcome to masm!' ;B8000H~BFFFFH区域显示
data ends
color segment
db 02h,24h,71h
color ends
code segment
start: mov ax,data
mov ds,ax
mov dx,color
mov ax,0b86eh
mov es,ax
mov cx,3 ;显示3行
mov di,0
s0: push cx
call show
mov ax,es
add ax,10
mov es,ax
inc di
pop cx
loop s0
mov ax,4c00h
int 21h
show: push es
mov es,dx
mov ah,es:[di]
pop es ;找出对应的color
mov cx,16
mov bx,0
mov si,64
s: mov al,ds:[bx]
mov es:[si],al
mov es:[si+1],ah
inc bx
add si,2
loop s
ret
code ends
end start