win7开机进bios-(win7开机进去启动修复)
来源:191路由网 2022-12-14 00:51:28
本节内容源自《操作系统真象还原》,请大家支持正版
bios是如何苏醒的
bios其实一直睡在某个地方,直到被唤醒……前面热火朝天的说了bios的功能和内存布局,似乎还没说到正题上,bios是如何启动的呢。因为bios是计算机上第一个运行的软件,所以它不可能自己加载自己,由此可以知道,它是由硬件加载的。那这个硬件是谁呢?其实前面已经提到过了,相当于是只读存储器ROM,因为它一直就睡在那里不动。
大家知道,只读存储器中的内容是不可擦除的,也就是它不像动态随机访问存储器DRAM那样,掉电后,里面的数据就会丢失。这种存储介质是用来存储一成不变的数据,当数据写进去后,便与日月同辉,庭前坐看花开花落,不朽于天地万物之间,哈哈,有点夸张了。
bios代码所做的工作也是一成不变的,而且在正常情况下,其本身是不需要修改的,平时听说的那些主板坏了要刷bios属于例外。于是bios顺理成章地便被写进此ROM。ROM也是块内存,内存就需要被访问。此ROM被映射在低端1M内存的顶部,即地址0xF0000~0xFFFFF处,可以参考电脑表1-1顶部的bios部分。只要访问此处的地址便是访问了bios,这个映射是由硬件完成的。
bios本身是个程序,程序要执行,就要有个入口地址才行,此入口地址便是0xFFFF0。最重要的一点来了,知道了bios在哪里后,cpu如何去执行它,即cpu中的cs:ip值是如何组合成0xFFFF0的。如果大家不了解内存的分段访问机制,可以参考第0章,里面有讲解cpu为什么分段方式内存。说正事,cpu访问内存是用段地址+偏移地址来实现的,由于在实模式之下,段地址需要乘以16后才能与偏移地址相加,求出的和便是物理地址,cpu便拿此地址直接用了。这个“段基址:段内偏移地址”的组合是0xffff:0吗?或者是0xF000:0xFFF0?或者是更奇葩一点的组合:0xFEEE:0x1110? 或者您想出的组合比我的还奇葩,好啦,不折磨大家了,还是说正事要紧。既然做为第一个运行的程序都没开始执行,自然就没办法用软件搞定这件事了,还是得靠硬件支持才行。在开机的一瞬间,也就是接电的一瞬间,cpu的cs:ip寄存器被强制初始化为0xF000:0xFFF0。由于开机的时候是处于实模式,再重复一遍加深印象,在实模式下的段基址要乘以16,也就是左移4位,于是0xF000:0xFFF0的等效地址将是0xFFFF0。上面说过了,此地址便是bios的入口地址。当我给出这个地址后,不知道大家意识到什么没有。bios是在实模式下运行的,而实模式只能访问1M空间(20位地址线,2的20次方是1M)。而地址0xFFFF0距1M只有16个字节了(见表1-1除标题外的第一行),这么小的空间够干吗?bios又要检测硬件、做各种初始化工作、还要建立中断向量表……16字节的机器指令肯定干不了这么多事。也许有的同学会问,超过寄存器宽度会怎么样呢?比如0xFFFF0+16,这样就溢出了,由于实模式下的寄存器宽度是16位,0xFFFF0+16已经超过了其最大值0xFFFFF。溢出的部分就会回卷到0,又会重新电脑开始,即0xFFFF0+16等于0,0xFFFF0+17等于1。
既然此处只有16字节的空间了,这只能说明bios真正的代码不在这,那此处的代码只能是个跳转指令才能解释得通了。好,既然心里有了推断,那咱们就来证明这个推断正确与否。下图是我在bochs中抓的图,下面给大家分析一下这图中的信息都代表什么。
首先得承认,这张图有点超前了,这是在有了MBR后才能抓到的,否则会提示boot failed: not a bootable disk,而我们还没有MBR,还没有写主引导记录。先不管这张图是怎么来的啦,反正大家马上就能够在自己的虚拟机里看到这张图了,大概还有1柱香的工夫,可能是很长的那种香^—^。大家先注意框框中的内容。一共有3个,最上面左边第1个标有cs:ip的那个框,cs寄存器的值是0xf000,ip寄存器的值是0xfff0,也就是段基址0xf000,段内偏移地址0xfff0,这个组合出来的地址便是0xffff0,这是处理器下一条待执行指令的地址。这与上面所说的bios入口地址是吻合的。另外,因为cs和ip寄存器中存储的是下一条要执行的指令,目前还没有执行,也就是说,当前还没有执行bios,这是机器刚开机的那一刻。这一刻还是值得庆祝的,因为即使是计算机行业的同学都很少看到这一刻,何况我们让这一刻停了下来,成为永恒。
按理说,既然让cpu去执行0xFFFF0处的内容(目前还不知道其是指令还是数据),此内容应该是指令才行,否则这地址处的内容若是数据而不是指令,cpu硬是把它当电脑成指令来译码的话,一定会弄巧成拙铸成大错。现在咱们又有了新的推断,物理地址0xFFFF0处应该是指令,继续探索。继续看第二个框框,里面有条指令jmp far f000:e05b,这是条跳转指令,也就是证明了在内存物理地址0xFFFF0处的内容是一条跳转指令,我们的判断是正确的。那cpu的执行流是跳到哪里了呢?段基址0xf000左移4位+0xe05b,即跳向了0xfe05b处,这是bios代码真正开始的地方。
第三个框框cs:f000,其意义是cs寄存器的值是f000,与我们刚刚所说的加电时强制将cs置为f000是吻合的,正确。接下来bios便马不停蹄的检测内存,显卡等外设信息,当检测通过,并初始化好硬件后,开始在内存中0x000~0x3FF处建立数据结构,中断向量表IVT并填写中断例程。
好了,终于到了接力的时刻,这是这场接力赛的第一棒,它将交给谁呢,咱们下回再说。
【再续】
电脑
相关阅读
-
-
小米电脑怎么用usb启动不-(小米电脑怎么用usb启动不了)
小米电脑怎么用usb启动不(小米电脑怎么用usb启动不了)最近,我用了四年的小米笔记本出现无故死机现象,开机工作一段时间无响应,或者运行大软件时死机,画面即时定格,鼠标无法操作……以上现象相信使用Windows系统的用户并不陌生,让很多的用户,尤其是技术小白十分头痛,不时得问津楼下的电脑维修点。今天,我个人分享一下自己解除这个现象思路以及这次小米笔记本假死的处理经历,不过...
2022-12-14
-
-
win7开机进bios-(win7开机进去启动修复)
win7开机进bios(win7开机进去启动修复)本节内容源自《操作系统真象还原》,请大家支持正版bios是如何苏醒的bios其实一直睡在某个地方,直到被唤醒……前面热火朝天的说了bios的功能和内存布局,似乎还没说到正题上,bios是如何启动的呢。因为bios是计算机上第一个运行的软件,所以它不可能自己加载自己,由此可以知道,它是由硬件加载的。那这个硬件是谁呢?其...
2022-12-14
-
-
电脑蓝屏怎么用pe系统还原-(电脑蓝屏怎么用pe系统还原)
电脑蓝屏怎么用pe系统还原(电脑蓝屏怎么用pe系统还原)电脑开机莫名奇妙的出现蓝屏界面,还有很多小伙伴玩游戏的时候偶尔会出现蓝屏的状况,这个到底怎么回事呢?遇到电脑蓝屏请不要怕,记住下面常见的蓝屏代码与解决方法,下次遇到就知道如何解决了。A1:蓝屏代码:0x000...
2022-12-14
-
-
u盘引导盘怎么装系统-()
u盘引导盘怎么装系统()很多朋友都不知道如何把WTG系统安装到U盘中使用,今天小编就来教大家把WTG系统安装在U盘中的方法。在安装系统之前,首先我们需要了解一下什么样的U盘适合安装WTG系统。众所周知,现在市面上的U盘种类有很多,各种品牌的质...
2022-12-14
-
-
外星人如何用u盘启动-(外星人如何用u盘启动电脑)
外星人如何用u盘启动(外星人如何用u盘启动电脑)AlienwareCommandCenter(智控中心,后简称AWCC)是外星人和G系列机器所带的一款功能性软件,它能带给我们各种灯效的视觉盛宴,又能带给我们调节性能走向超神之路的超凡体验。当这个软件出现问题时,就会带给我们一些烦恼,那这篇文章将指导您在出现问题时如何修复,卸载,安装这款软件。当您出现运行...
2022-12-14
191路由网 - 192.168.1.1,192.168.0.1无线路由器设置教程
版权声明:本站的文章和图片来自互联网收集,仅做分享之用如有侵权请联系站长,我们将在24小时内删除