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。
小贴士
CS(Code Segment Register):代码段寄存器,存在于CPU中,指向CPU当前执行代码在内存中所在的区域。
注意,这是一个纯硬件完成的动作!如果此时这个位置没有可执行代码,那就什么也不用说了,计算机就此死机。反之,如果这个位置有可执行代码,计算机将从这里的代码开始,沿着后续程序一直执行下去。
BIOS程序的入口地址恰恰就是0xFFFF0 !也就是说,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程序的第一条指令就设计在这个位置上。
相关文章推荐
- 1.1 启动BIOS,准备实模式下的中断向量表和中断服务程序
- BIOS的入口地址0xFFFF0
- iOS开发优化tableView滑动流畅性的集中常用方法
- 2015/10/2 iOS笔记 细节
- 设置tableview的滚动范围--iOS开发系列---项目中成长的知识三
- 当数据量很少的时候,tableview会显示多余的cell--iOS开发系列---项目中成长的知识二
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #5
- 把所有界面的状态栏字体颜色设置为白色--iOS开发系列---项目中成长的知识一
- iOS开发遇到的坑之四--图片命名不规范
- IOS开发笔记-01按钮操作-08.git的简单使用
- iOS 中获得键盘的弹出和隐藏
- ios 多线程-GCD-NSOperation
- IOS第二天(点语法、构造方法与discription方法)
- 允许debian wheezy支持IOS7+的iphone.
- nsbundle的一些获取本地信息
- iOS NSAssertionHandler讲解
- IOS开发笔记-01按钮操作-05.IBAction&IBOutlet 06.加法计算器小结 07.关闭键盘
- [转载]iOS9 使用CoreLocation
- IOS 触摸获取坐标点、缩放图片实例
- [iOS开发项目-6] 应用程序管理