预备知识:
1 Intel 8086内存空间分布:
地址 | 对应设备 |
0x00000-0x9FFFF | 内存条 |
0xA0000-0xEFFFF | 外围设备 |
0xF0000-0xFFFFF | 主板BIOS芯片 |
在Intel 8086环境下,内存分布如上表所示:
地址0x00000-0x9FFFF对应内存条,即访问该范围地址实际是访问内存条。
地址0xA0000-0xEFFFF对应外围设备,即访问该范围地址实际是外围设备。
外围设备是一个集合,根据不同的设备对该区域进行了划分;其中0xB8000-0xBFFFF对应显卡的内存空间,即显存,操作显存意味着控制屏幕的显示内容。
地址0xF0000-0xFFFFF对应主板BIOS芯片,即访问该范围地址实际是访问BIOS芯片。
2 CPU
CPU有一个RESET引脚,每当处理器加电或RESET引脚的电平由低变高时CPU将会执行硬件处理化以及一个可选的内部自测试,然后将所有寄存器的内容初始化到预置状态。
Intel 8086的复位会将CS寄存器初始化为0XFFFF,其它所有寄存器初始化为0x0000。
注意: 8086之后的处理器未延续这种设计
3 BIOS
基本输出输入系统 Basic Input Output System
BIOS是预先写入到主板芯片的一个程序,用于检测硬件状态以及加载启动程序。
4 硬盘的引导扇区
硬盘的第一个扇区为0面0道1扇区,或0头0柱1扇区,也称之为主引导扇区。
如果计算机的设置是从硬盘启动,BIOS将读取主引导扇区的内容并将其加载到内存地址0x0000:0x7C00处,然后使用jmp指定跳转过去。
5 显卡的模式
显卡的工作模式分为文本模式与图形模式,可以通过指定访问显卡,设置其工作模式。
图形模式:
显卡控制显示器的最小单位是像素,一个像素对应显示器上的一个点。
显存以某种颜色格式(例如真彩色)存储着每一个像素对应的颜色。
显卡周期性的从显存中提取颜色数值,并把它们按照顺序以相同的颜色显示在显示器上。
真彩色:使用3个字节标识一个像素,其可以标识16777216(2^24=16777216)种颜色
文本模式:
(个人推测: 可能是显卡将文本模式的数据转换为图形模式的数据,然后传递给显示器;
这样看来显卡自身有着一套处理程序,而且是独立于CPU进行运行的,因为只需要CPU将数据写入显存,而不需要CPU从显存中取出数据传递给显示器;
其他的外围设备可能也各自有着独立的处理程序,CPU仅仅是向外设备传递信息或发送数据,外围设备根据信息或数据自行进行处理)
由于历史原因,所有在个人计算机上使用的显卡,在加电自检后都将初始化到80x25的文本模式(25行,每行80个字符,共2000个字符)
文本模式下使用ASCII码作为显示字符,且用2个相邻字节表示一个字符。
第一个字节用于指定显示的字符,存放的是字符的ASCII码
第二个字节用于指定字符的显示属性,低4位为前景色(字符颜色),高4位为背景色。
前景色最高位是高亮位 (I),背景色最高位是闪烁位(K);它们的剩余3位为红(R)绿(G)蓝(B),颜色表:
开机过程(8086环境):
1 当按下开机按钮后,触动CPU的RESET引脚,随后CPU复位
2 CPU复位后,CS为0xFFFF,IP为0x0000;
此时CPU执行0xFFFF0处指令,该地址位于BIOS的地址范围内,该指令通常是跳转指令,随后BIOS进行硬件检测等功能(例:通过按键进入BIOS操作界面)
3 BIOS程序结束前将读取主引导扇区内的内容并加载到内存的0x07c00处,随后通过跳转指令从0x07c00处开始执行指令
4 根据主引导扇区内的代码决定下一步的操作,例如加载Windows、Liunx系统;或可以将自己的代码写入主扇区,从而通过CPU直接运行我们自己的代码,比如向显存写入数据等。。。(本书通过该方式引导我们学习)