虽然在题目以及文中我们使用 “显示器”这个字眼,但它并不是一个精确的称呼,因为我们操作的对象可能是显卡,或者仅仅是显存。不过没关系,开始的不精确不代表我们不严谨,因为随着认识的深入,这些概念最终会清晰起来。目前,在模糊的地方我们可以暂时使用 “视频”这个词。
到现在才来仔细介绍视频好像有点晚,因为从一开始我们写那个简单的Boot Sector的时候,就从来没有离开过对视频的操作--——如果不是通过屏幕的反馈,我们怎么知道计算机在做些什么呢?
在最初那个Boot Sector中,打印字符是通过BIOS中断来实现的。但到了保护模式中,BIOS中断不再能用了,我们就在GDT中建立了一个段,它的开始地址是0xB8000,通过段寄存器gs对它进行写操作,从而实现数据的显示。到目前为止,我们对于视频模块的操作也仅限于此,想显示什么就mov而已。
我们只要认识开机看到的默认模式就够了,那就是80×25文本模式。在这种模式下,显存大小为32KB,占用的范围为0xB8000~0xBFFFF。每2字节代表一个字符,其中低字节表示字符的ASCII码,高字节表示字符的属性。一个屏幕总共可以显示25行,每行80个字符。 低字节表示的是字符本身,高字节用来定义字符的颜色。