加载BIOS
当PC的电源打开后, 80x86结构的CPU将自动进入实模式.并且CPU的 cs:ip 寄存器被强制初始化为 0xF000 : 0xFFF0.
先抛出来个问题, 为什么 cs:ip 寄存器会被初始化为0xF000 : 0xFFF0 ?
继续往后看,当主机加电后,第一个运行的软件是BIOS,但是此时由于计算机刚加电,内存里还没有数据,所以BIOS并不是放在内存中的,而是放在ROM(只读存储器).而BIOS由硬件来加载,被加载到 0xF0000~0xFFFFF处.
上面提到过,cs:ip被初始化为0xF000 : 0xFFF0,即指向0xFFFF0这个地址,也就是说,当加电后计算机执行的第一条指令的地址为0xFFFF0.但是实模式下只能访问1MB内存,此时距离1MB内存就剩下16字节, 这16字节的内容是什么呢? jmp f000: e05b 是一个跳转指令,跳转到BIOS的加载地址去执行BIOS程序.
BIOS的作用
主要是进行硬件的诊断、检测和初始化。比如检测内存、显卡等外设信息, 初始化硬件等。 然后在内存中 0x000~0x3FF出建立数据建构, 中断向量表IVT并填写中断例程。最后一项工作: 校验启动盘中位于0盘0道1扇区中的内容。
BIOS->MBR
为什么BIOS的最后一项工作是校验启动盘中位于0盘0道1扇区中的内容呢?
emmm,可以说是约定吧。其实接下来,是要开始加载MBR了,MBR在那个扇区都可以,不一定非要在第一个扇区。 但是如果没有约定,BIOS需要检查电脑中的所有存储设备,去判断它这个扇区是不是存在可执行的