【我所認知的BIOS】-->第一条指令
By LightSeed
2009-10-26
其实早就想写这样一篇文章了,今天才着手写了下。说来也惭愧关于CPU的第一条指令的问题,在一开始study的时候我自己并没有求甚解,所以当时理解的也比较肤浅,今天我们来详细探讨一下关于reset(从没电到上电)后CPU执行第一条指令的一些东西。(说明一下:这篇文章是讨论的IA32架构上的处理器。)
1、准备知识
如果您还对Flat mode的原理还不太了解的话,那么我想你可以再回头参考一下关于Flat mode的原理。见
http://blog.csdn.net/lightseed/archive/2009/07/01/4312834.aspx
在保护模式下,我们的段寄存器其实都是由两部分组成的:一步分是可见的段选择子(segment selector),另外一部分是隐藏的基地址(base address)。那么第一条指令就和这个密切相关。
2、CPU到哪里去取第一条指令
开门见山,当HW reset后,CPU会到(物理地址为)0FFFF FFF0H处去取指令并执行之。这个地址很明显是CPU的最高物理地址往下数16个bytes的地址处。BIOS的第一条指令必须要被放到这里,否则的话。。。后果可想而知。
3、为什么是这里
我想只要是刚入门的freshman都会感到比较疑惑,这个地址(FFFF FFF0H)明明是大于1-Mbyte的地址了,而此时的CPU却是在实模式下的,那么CPU是怎么到这里去取指令的呢?
3.1 原理
不过看完上面这段话的描述,我们是不是感觉有点亲切呢?再回忆一下,其实在我们之前的讨论中关于Flat mode的时候,就接触到个概念了。在Flat mode中的时候,虽然我们是处于实模式,但是由于我们的段寄存器(segment register)是由两个部分组成的,一部分是可见的段选择子,另外一部分是隐藏部分(段基地址)。如果我们在protect mode中修改好了段寄存器的段基地址部分,然后返回实模式,那么只要不显示地修改段寄存器,CPU在寻址的时候仍然会照protect mode下的寻址方式来计算地址,即:segment selector:offset。
3.2 BIST后CPU的状态
经过正确的power sequence后,CPU吃到CPURST#正常BIST(Built-In Self-Test)后,CPU其实就正是处于Flat mode中。(比较特殊的实模式)那么让我们来看看正常的BIST后,CPU的(部分)寄存器的状态吧。见图1。
图1 BIST后部分寄存器的值
图2 CPU关于CR0的bit定义
看清楚了图2中定义的CR0的bit0了么?PE,是指protect mode enable。那么我们再结合图1两个方框处关于CR0和CS的初始值,可以很清楚地看到这个时候CPU是处于实模式的,然而CS的Base却是等于FFFF0000H的,而且段界限是FFFFH,并且CS的选择子是等于F000H的。
3.3 详细计算
那这样以来,如果我们用CS:IP是用F000H:FFF0H的方式来操作的时候,CPU其实是会把地址这样算的。F000H是CS的段选择子,从这里取出CS的基地址(就是FFFF0000H)再加上IP的值(FFF0H)就等于实际要访问的内存地址(正好是FFFF FFF0H)[FFFF0000+FFF0H=FFFFFFF0H]。所以在32bit的CPU上,这个第一条指令的计算是这样来的。
不过一般情况下HW reset后,BIOS都会在第一条指令这里安排一个far jump来显示地修改CS的值,目的就是能够让CS真正进入real mode。就是让CS能够遵从正常的real mode的寻址翻译规则。(CS base address = CS segment selector * 16)。那至于后面的BIOS code的run的环境,我想大家就都应该了解了。
关于第一条指令的讲述Bini前辈也曾详细说明过,这里是连接供大家参考。
http://www.ufoit.com/bbs/thread-106-1-1.html
分享到:
相关推荐
在计算机加电启动后,整个启动过程的第一步就是启动BIOS(Basic Input/Output System)。在这个阶段,系统处于实模式下,主要任务是加载中断向量表和中断服务程序。 1. **BIOS的启动机制**: - 当计算机加电时,...
以上就是从计算机基础第1次作业中提炼出的相关知识点,涵盖了计算机编码、操作系统加载、CPU执行流程、信息技术扩展功能、BIOS启动过程、存储器速度比较、存储设备、BIOS功能、数制转换、计算与存储技术的作用、输出...
4. **加载引导扇区**: 当BIOS识别到一个可引导磁盘时,会读取该磁盘的第一个扇区(512字节)到内存中。如果该扇区以`55AA`结束,则被认为是有效的引导扇区。 5. **执行引导程序**: 引导程序(通常位于引导扇区中)...
- 第一台计算机ENIAC并非冯·诺伊曼结构,但后来的计算机大多采用此结构。 - 冯·诺伊曼计算机的特点包括指令和数据共存于存储器,由五大部件构成:控制器、运算器、存储器、输入设备和输出设备。 - 它奠定了现代...
《计算机组成原理》是唐朔飞教授撰写的一本经典教材,第二版在第一版的基础上进行了更新和完善,旨在深入浅出地讲解计算机系统的基本构造和工作原理。这本书对于学习计算机科学与技术、软件工程等专业的学生,以及对...
通过深入学习《微机原理与接口技术》,学生可以具备分析和解决计算机硬件问题的能力,设计和实现简单的硬件接口,同时培养计算机系统级的思维方式,对整个计算机系统的运作有更全面的认知。这门课程的第二版可能更新...
### Windows系统解析 ...这些知识点不仅对于学习编程语言时理解指令在计算机内的执行模式至关重要,同时也为我们提供了一个清晰的内存模式认知框架,有助于进一步探索计算机科学领域的其他高级主题。
10. **CMOS信息**:CMOS存储了系统设置,如果信息丢失,需要重新设置,通常通过BIOS中的选项,而非从另一台电脑中复制。 11. **BIOS与CMOS**:这两个是不同的概念,BIOS是固件,负责初始化硬件和提供基本系统服务;...
7. 有关计算机指令集的选择题,“ENIAC”为世界上第一台通用电子数字积分计算机,而“EDVAC”和“MARK-II”均是早期的计算机系统。这些选项考验对计算机历史及发展基础的认知。 8. 在计算机程序设计领域,“BASIC”...
13. **CMOS芯片**:CMOS芯片用于存储BIOS设定的系统参数,断电后信息会丢失,它不是内存的一部分。 14. **内存地址编码**:16KB的内存储器地址编码范围是从0000H到3FFFH。 15. **U盘特性**:U盘是外部设备,通过...
1. **电子器件的发展**:第三代计算机(约1965-1971年)采用的主要电子器件是小规模集成电路(SSI),这标志着计算机技术的一个重大进步,因为相比于第一代的电子管和第二代的晶体管,集成电路具有更高的集成度和更...
在未来,我们可以预见计算机硬件系统将朝着更小、更快、更智能的方向发展,量子计算机和生物计算机等前沿技术的探索,将可能彻底改变我们对计算机硬件的认知。只有不断学习和掌握这些基础知识,我们才能在快速变化的...