使用计算机的经验得知:要想执行一个程序,必须在窗口中鼠标双击它,或者在命令行中输入命令。从计算机底层机制上讲,我们使用的windows其实已经是一个运行起来的程序了。 [呆无辜] 在开机加电的一瞬间,内存中什么程序也没有,没有任何程序在运行,不可能有操作系统,更不可能有操作系统的用户界面。无法人为地执行BIOS程序,那么BIOS程序又是由谁来执行的呢? [呆无辜] 从体系的角度看:既然用软件方法不可能执行BIOS,就只能靠硬件方法完成了。 从硬件角度看,Intel为了兼容,也为了解决最开始的启动问题,Intel将所有80x86系列的CPU的硬件都设计为加电即进入16位实模式状态运行。 同时将CPU硬件逻辑设计为加电瞬间强行将CS的值置为0xF000、IP的值置为0xFFF0,这样CS:IP就指向0xFFFF0这个地址位置,0xFFFF0指向了BIOS的地址范围。 这是一个纯硬件完成的动作!如果此时这个位置没有可执行代码,那么计算机就此死机。反之,如果这个位置有可执行代码,计算机将从这里的代码开始,沿着后续程序一直执行下去。 [呆无辜] BIOS程序的入口地址恰恰就是0xFFFF0 ! [呆无辜][呆无辜][呆无辜] IP/EIP(Instruction Pointer):指令指针寄存器,存在于CPU中,记录将要执行的指令在代码段内的偏移地址,和CS组合即为将要执行的指令的内存地址。实模式为绝对地址,指令指针为16位,即IP;保护模式下为线性地址,指令指针为32位,即EIP。 CS(Code Segment Register):代码段寄存器,存在于CPU中,指向CPU当前执行代码在内存中的区域(定义了存放代码的存储器的起始地址)。 |
|
来自: 新用户0935snDB > 《待分类》