6-如何显示文字和图像

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35733751/article/details/85005728

通过前面几篇的学习我们知道处理器加电或复位之后,BIOS-ROM程序就会读取硬盘的主引导扇区(即0面0道1扇区),并将它加载到0x0000:0x7c00处,即物理地址0x07c00,并判断是否有效。

一个有效的主引导扇区的最后两字节是0x55和0xAA,BIOS-ROM程序会判断这两个标志(非常重要),如果有效就执行jmp 0x0000:0x7c00指令并跳转到指定的位置继续执行。把操作系统加载到内存,直到操作系统启动完成。

而本篇我们要做的就是把写好的汇编程序放到主引导扇区,让处理器执行并在屏幕上显示。在此之前,我们需要学习显卡和显存的知识,了解文字是如何显示在屏幕上的。

 

1. 显卡的工作方式

为了显示文字,通常需要两种硬件,即显示器和显卡;显卡的职责是为显示器提供内容,并控制显示器的显示模式和状态,显示器的职责就是把数据以视觉可见的方式呈现在屏幕上。显卡(Video card,Graphics card)作为计算机最基本的配件之一,其主要作用是将CPU提供的指令和数据进行相应的处理(即数模信号转换),转换成显示器能够接受的文字或图象后显示出来。

显卡控制显示器的最小单位是像素,一个像素对应屏幕的一个点,通常屏幕上有数十万甚至更多的像素,通过控制每个像素的亮度和颜色,我们就能让大量的像素组成文字和美丽的图像。 在我们的显示器会有一个“分辨率”的概念。比如1024*768,把它们互相乘一下,就可以计算出屏幕上有多少个像素点。

 

那么显卡是如何控制像素呢?

答案是显卡内部都有自己的存储器,也称显示存储器(Video RAM:VRAM),简称显存,要显示的内容都预先写入显存,显存跟我们的内存结构是一样的:一个地址编号对应一个字节存储单元

对于显示器来说,显示黑白图像是最简单的,只需要控制每个像素是亮,还是不亮。如果不亮当成比特“0”,亮看成比特“1”,就好办多了,而这个显示过程就是数模信号转换的过程。

如上图:

显存的第1个字节对应屏幕左上角连续的8个像素,在这个字节中只有前2个比特位为1,所以对应的只有前2个像素亮了,其他比特不亮。

像素的第二个字节对应着屏幕上后续的8个像素,以此类推……

显卡的工作是周期性的从显存中提取这些比特,并把它们按顺序显示在屏幕上。当然,黑色和白色只需要1个比特就能表示。但是要显示更多的颜色,1个比特就不够了。

 

2. 文本工作模式

刚才所讨论的,就是人们常说的显卡的图形模式,但是8086CPU那个时代,计算机的资源,性能十分有限,那时人们只要求计算机能够显示文字就行。

需要明白的是,无论是图片还是文字,显示器只知道等这些内容都是由屏幕上的像素点组成的,按照设定的工作模式和显存中的数据,点亮屏幕的哪个位置,用什么颜色点亮而已,当然这个过程非常麻烦,复杂的。

于是,工程师们为了方便又给显卡设计了一种工作模式,即“文本模式”,其实文字模式就是对“图形模式”的封装,就像汇编语言是对机器语言的“封装”一样。

 

工程师们就想着,干脆把字符对应的ascii编码,直接放到显存里面,第一个代码对应着屏幕左上角第一个字符,第二个代码对应着屏幕左上角第二个字符,以此类推...... 剩下的工作就是设计一个电路,这个电路根据代码来控制区域的像素点发生亮度变化,这就是字符发生器和控制电路的事情了。

 

显存

显存是位于显卡上的,我们要让CPU和显卡打交道,自然要比和内存打交道多一道流程,速度和效率随之就要慢了很多。特别是后来的电脑为了实现游戏动画效果和播放高清电影,必须能够让CPU直接读写显存。为此,设计计算机的工程师决定把显存的地址直接映射到内存的地址空间里。

我们知道,8086可以访问1MB内存,其中0x00000 - 0x9FFFF属于常规内存,相当于直接访问内存的数据,0xF0000~0xFFFFF由主板上的一个芯片提供,即ROM-BIOS。

中间还有320KB的空间,即0xA0000-0xEFFFF。这段地址空间,是留给一些除了内存的其他外部设备,包括显卡,因为显示功能对于现代计算机非常重要。

所以0xB8000 - 0xBFFFF这段物理内存地址映射到了显卡中的显存。处理器总是可以访问这段空间,如果显卡出了毛病怎么办?BIOS-ROM自检(计算机检查硬件设备是否正常工作)就不会通过,计算机根本就无法启动,也不会加载并执行主引导扇区的内容。

 

猜你喜欢

转载自blog.csdn.net/qq_35733751/article/details/85005728
今日推荐