汇编语言中如何在屏幕显示字符

鉴于不断学习王爽老师的《汇编语言》,越往后的章节的题目,多有在屏幕中显示XX字符或者string的问题。前面对屏幕显示的部分没有详细的看,也就一直比较乱。

现在总结一下汇编语言中如何在屏幕上显示内容的问题。关键是显示字符的结构及所在的内存空间。

首先,需要明确我们想要显示的内容主要存放在什么位置,是以什么样的结构存放的。

在内存地址空间中,B8000H~BFFFFH空间用来存放显示缓冲区的内容,共32KB。

显示缓冲区以页的形式存放要显示的内容,就像日历一样,每一页都有内容,但是只显示最上面那一页(默认情况下)。这种日历只有共有8页,也就是每页包含4KB的内容。而每一页中,可以显示25行,每一行80个字符。(这里需要注意一下字符个概念,在屏幕上每一个字符由两个字节构成,一个字节代表要显示的ASCII值,一个字节代表要显示的属性(即颜色,亮度,背景,闪烁等)。所以一行有160个字节)

属性字节的格式为:

  7 6 5 4 3 2 1 0
含义 BL R G B I R G B
  闪烁 背景红 背景绿 背景蓝 高亮 前景红 前景绿 前景蓝

因此,要显示的属性为高亮的前景色为红色,背景色为绿色,属性值可以设置:mov al,00101100b。将al赋给指定的位置,就可以显示该位置的ASCII值的属性了

基于以上知识,要在第五行的中间位置显示大写字母A,则可以如下表示:

mov ax,0

mov es,ax

mov al,41H

mov byte ptr es:[160 * 5 + 40 * 2],al;要在第几行显示,160*该行号,中间位置是80

;如果要显示颜色,如上例子

mov bl,00101100b

mov byteptr es:[160*5 + 40*2 + 1],bl;显示的是高亮的绿底红字的大写字母A

你可能感兴趣的:(汇编学习)