您的位置:首页 > 移动开发 > IOS开发

1.1.1 BIOS的启动原理

2015-10-03 07:23 239 查看
1.1.1 BIOS的启动原理

在了解BIOS是如何将操作系统程序加载到内存中之前,我们先来了解一下BIOS程序自身是如何启动的。从我们使用计算机的经验得知:要想执行一个程序,必须在窗口中双击它,或者在命令行界面中输入相应的执行命令。从计算机底层机制上讲,这其实是在一个已经运行起来的操作系统的可视化界面或命令行界面中执行一个程序。但是,在开机加电的一瞬间,内存中什么程序也没有,没有任何程序在运行,不可能有操作系统,更不可能有操作系统的用户界面。我们无法人为地执行BIOS程序,那BIOS程序又是由谁来执行的呢?

答案是:0xFFFF0 !!!

从体系的角度看,不难得出这样的结论:既然软件方法不可能执行BIOS,那就只能靠硬件方法完成了。

从硬件角度看,Intel 80x86系列的CPU可以分别在16位实模式和32位保护模式下运行。为了兼容,也为了解决最开始的启动问题,Intel 将所有80x86系列的CPU(包括最新型号的CPU)的硬件都设计为加电即进入16位实模式状态运行。同时,还有一点非常关键,即将CPU硬件逻辑设计为加电瞬间强行将CS的值置为0xFFFF,IP的值置为0x0000,这样CS:IP就指向0xFFFF0这个地址位置,如图1-1 所示。从图1-1中可以清楚地看到,0xFFFF0指向了BIOS的地址范围。

小贴士

IP/EIP(Instruction Pointer):指令指针寄存器,存在于CPU中,记录将要执行的指令在代码段内的偏移地址,它与CS组合即为将要执行的指令的内存地址。实模式为绝对地址,指令指针为16位,即IP;保护模式下为线性地址,指令指针为32位,即EIP。


图1-1 启动时BIOS在内存中的状态及初始执行位置
小贴士

CS(Code Segment Register):代码段寄存器,存在于CPU中,指向CPU当前执行代码在内存中所在的区域。

注意,这是一个纯硬件完成的动作!如果此时这个位置没有可执行代码,那就什么也不用说了,计算机就此死机。反之,如果这个位置有可执行代码,计算机将从这里的代码开始,沿着后续程序一直执行下去。

BIOS程序的入口地址恰恰就是0xFFFF0 !也就是说,BIOS程序的第一条指令就设计在这个位置上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: