开机CPU执行的哪些指令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开机CPU执行的哪些指令?相关的知识,希望对你有一定的参考价值。

我想知道计算机开机后,执行的第一条指令是什么,以及之后直到引导操作系统的过程中,它执行的指令是如何变化的。我也搜过很多关于开机启动过程的资料,但是还是搞不懂,按照他们的说法,似乎按下电源待电压稳定后进行的POST等等都是自然而然的过程。关于这方面的资料也不多,而且说得都差不多,希望有乐意解答者说详细点!

第一条指令应该是:放大不稳定电流导致循环振荡的部分能量进入固定电路。

具体的步骤为

第一步: 当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还不太稳定,主板上的控制芯片组会向cpu发出并保持一个reset(重置)信号,让cpu内部自动恢复到初始状态,但cpu在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去reset信号(如果是手工按下计算机面板上的reset按钮来重启机器,那么松开该按钮时芯片组就会撤去reset信号),cpu马上就从地址ffff0h处开始执行指令,从前面的介绍可知,这个地址实际上在系统bios的地址范围内,无论是award bios还是ami bios,放在这里的只是一条跳转指令,跳到系统bios中真正的启动代码处。

第二步: 系统bios的启动代码首先要做的事情就是进行post(power-on self test,加电后自检),post的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于post是最早进行的检测过程,此时显卡还没有初始化,如果系统bios在进行post的过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640k常规内存),那么系统bios就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类型。在正常情况下,post过程进行得非常快,我们几乎无法感觉到它的存在,post结束之后就会调用其它代码来进行更完整的硬件检测。

第三步: 接下来系统bios将查找显卡的bios,前面说过,存放显卡bios的rom芯片的起始地址通常设在c0000h处,系统bios在这个地方找到显卡bios之后就调用它的初始化代码,由显卡bios来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统bios接着会查找其它设备的bios程序,找到之后同样要调用这些bios内部的初始化代码来初始化相关的设备。

第四步: 查找完所有其它设备的bios之后,系统bios将显示出它自己的启动画面,其中包括有系统bios的类型、序列号和版本号等内容。

第五步: 接着系统bios将检测和显示cpu的类型和工作频率,然后开始测试所有的ram,并同时在屏幕上显示内存测试的进度,我们可以在cmos设置中自行决定使用简单耗时少或者详细耗时多的测试方式。

第六步: 内存测试通过之后,系统bios将开始检测系统中安装的一些标准硬件设备,包括硬盘、cd-rom、串口、并口、软驱等设备,另外绝大多数较新版本的系统bios在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。

第七步: 标准设备检测完毕后,系统bios内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统bios都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、dma通道和i/o端口等资源。

第八步: 到这一步为止,所有硬件都已经检测配置完毕了,多数系统bios会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
参考技术A

    多数显卡都会在屏幕上显示出一些初始化信息,同时为该设备分配中断,包括硬盘,那么系统bios就会直接控制喇叭发声来报告错误。 

    dma通道和i&#47,介绍生产厂商,此时显卡还没有初始化,另外绝大多数较新版本的系统bios在这一过程中还要自动检测和设置内存的定时参数。 

    cpu在此刻不会马上执行指令。 

    声音的长短和次数代表了错误的类型,它便撤去reset信号(如果是手工按下计算机面板上的reset按钮来重启机器:放大不稳定电流导致循环振荡的部分能量进入固定电路,由显卡bios来初始化显卡,存放显卡bios的rom芯片的起始地址通常设在c0000h处,post的主要任务是检测系统中一些关键设备是否存在和能否正常工作,加电后自检)

    cpu马上就从地址ffff0h处开始执行指令、图形芯片类型等内容。 

    每找到一个设备之后: 接着系统bios将检测和显示cpu的类型和工作频率,让cpu内部自动恢复到初始状态、硬盘参数和访问模式等,放在这里的只是一条跳转指令第一条指令应该是,多数系统bios会重新清屏并在屏幕上方显示出一个表格。

     

参考技术B 计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,

0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:
1 程序计数器的内容(这时是0000H)送到地址寄存器;

2 程序计数器的内容自动加1(变为0001H);

3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

4 CPU使读控制线有效;

5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。
由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定
参考技术C 开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,

0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:
1 程序计数器的内容(这时是0000H)送到地址寄存器;

2 程序计数器的内容自动加1(变为0001H);

3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

4 CPU使读控制线有效;

5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。
由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。
参考技术D 单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。

取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。

分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。

一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。

下面我们将举个实例来说明指令的执行过程:

开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。

例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器,

0000H单元中已存放74H,0001H单元中已存放E0H。当单片机开始运行时,首先是进入取指阶段,其次序是:
1 程序计数器的内容(这时是0000H)送到地址寄存器;

2 程序计数器的内容自动加1(变为0001H);

3 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码电跟,使地址为0000H的单元被选中;

4 CPU使读控制线有效;

5 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。至此,取指阶段完成,进入译码分析和执行指令阶段。
由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。

计算机复位后CPU的第一指令执行地址

“硬件复位后,处理器中CS寄存器中可见的段选择符部分的值为F000H,EIP的值为0000FFF0H,由于处理器运行于实模式,并不使用CS中隐含的描述符部分,故处理器执行的第一条指令的地址遵循实模式下的物理地址生成规则而得:CS*16+EIP,即FFFF0000H+FFF0H=FFFFFFF0H。所以,硬件复位后,处理器从物理地址为FFFFFFF0H的存储单元取指执行。因此,要求含有初始化代码(一般就是所谓的BIOS)的EPROM必须映射到该地址。”

请问怎么由F000H变换到FFFF0000H的呢

寄存器是CPU内部用来放置数据和地址的存储单元,各种32位CPU中与微机原理有关的寄存器(编程可见)是一样的。本节仍以80486为例机来讨论,但结论可以不加修改地用于其它32位CPU。
位于CPU内部不同部件的寄存器有不同的作用,每个寄存器都有自己的功能。根据寄存器的性质,把编程可见的寄存器分成9组,并给每个编程可见的寄存器(以后简称寄存器)取一个名称
2.2.1 通用寄存器

通用寄存器中,32位寄存器EAX,EBX,ECX,EDX,EBP,ESP,ESI和EDI,它们既可保存逻辑和算术运算中的操作数,也可保存地址运算中的操作数(ESP寄存器不能用作基址寄存器)。这些寄存器的名称源于8086处理机的通用寄存器AX,BX,CX,DX,BP,SP,SI和DI。所以,这些通用寄存器的低16位可按原来的名字访问。16位寄存器AX,BX,CX,DX的每个字节均另有一个名字。字节寄存器命名为AH,BH,CH及DH(高字节)和AL,BL,CL和DL(低字节)。
16位寄存器与8位寄存器分别用于实现对16位CPU与8位CPU的兼容

2.2.2 指令指针指示器——EIP

它是32位寄存器,低16位称为IP,用与兼容16位CPU,其内容是下一条要取入CPU的指令在内存中的偏移地址。当一个程序开始运行时,系统把EIP清零,每取入一条指令,EPI自动增加取入CPU的字节数目。所以称EIP为指令指针。

2.2.3 标志寄存器——EFLAGS

32位寄存器,低16位称为FLAGS,与16位CPU的标志寄存器同名、同作用。
可分为3类:状态标志、控制标志和系统标志。简述如下:
AF——辅助进位标志。若该位置位时,表示最低有效的4位向高位产生了进位或借位,则该标志位主要用于BCD算术运算。
CF——进位标志。当该位置位,表示8位或16位或32位数的算术操作产生了进位或借位。进行多字节数的加、减时要使用该标志。循环移位指令也影响进位标志。
PF——奇偶标志。主要用于数据通讯应用程序中,当该位置位时,表示结果数据位中有偶数个1,可以检查数据传送中是否出现错误。
SF——符号标志。该位置位时表示结果的最高位(符号位)为1。对于带符号数,该位为1表示负数,该位为0表示正数。
ZF——零标志。当该位置位时,表示操作的结果为0。
DF——方向标志。用于控制数据串操作指令中的地址变化方向。DF为0时,SI/DI或ESI/EDI为自动增量,地址从低向高变化,DF为1,SI/DI或ESI/EDI为自动减量,地址从高向低变化。
IF——中断允许标志。该位置1时允许响应外部可屏蔽中断(INTR),该位复位时禁止响应外部可屏蔽中断。IF不影响非屏蔽外部中断(NMI)或内部产生的中断。
OF——溢出标志。若该位置位表示此次运算发生了溢出,即作为带符号数运算,其结果值超出目的单位所能表示的数值范围。这时目的单位的内容对带符号数没有意义。
TF——陷阱标志。当该位置位时,把处理器置成供调试的单步方式。在这种方式中,每条指令执行后CPU自动产生一个内部中断,使调试者可以观察程序中该条指令执行的情况。
NT——嵌套任务标志。用来表示当前的任务是否嵌套在另一任务内,当该位置1时,表示当前的任务有一个有效的链连接到前一个任务(被嵌套),如果执行IRET指令,则转换到前一个任务。
IOPL——输入/输出特权级标志,用于定义允许执行输入/输出指令的I/O特权级的数值。
RF——恢复标志。它是与调试寄存器的断点一起使用的标志,当该位置1时,即使遇到断点或调试故障,也不产生异常中断1。在成功地执行每条指令时,RF将自动复位。
VM——虚拟8086方式标志。当该位置位时,CPU工作在虚拟8086模式(简称为拟86模式),在这种模式下运行8086的程序就好象是在8086CPU上运行一样。
AC——对准检查标志。这是80486新定义的标志位。该位置位时,如果进行未对准的地址访问,则产生异常中断17。所谓未对准的地址访问,是指访问字数据时为奇地址,访问双字数据时不是4的倍数地址,访问8字节数据时,不是8的倍数的地址。对准检查在特权级为0,1,2时无效,只有在特权级3时有效。
s—状态标志;c—控制标志;x—系统标志

2.2.4 段寄存器

段寄存器有两部分,一部分是编程可见的选择器寄存器,为6个16位寄存器,对应在另一部分有6个64位的描述符寄存器,后一部分是编程不可见的。
在实地址方式或虚拟8086方式,描述符寄存器不起作用,选择器寄存器退化成16位CPU的段寄存器功能,存放内存段的段基址——段首地址的高16位,其中CS对应于代码段、SS对应于堆栈段,DS对应于数据段,ES对应于附加数据段,在串操作时,DS和ES分别对应于源数据段和目的数据段。FS和GS没有定义。
在保护方式下,选择器寄存器的低二位是特权标志,D2位是描述符表类型标志,高13位是选择码,指出本段的段描述符在由D2位指出的描述符表中的逻辑排序。当一个段第一次被访问时,首先根据指令给出的选择器值的D2位及高13位,到内存中相应的描述符表内取出相应的描述符(64位),送入对应的描述符寄存器,再从描述符中取出段基址进行逻辑地址到线性地址的变换。以后再访问该段时,直接从描述符寄存器取用段基址及安全检查,免去从内存中选取描述符的过程,实现加速运行。

2.2.5 系统地址寄存器

在80486微处理器中设置有4个系统地址寄存器,用来在保护方式下管理4个系统表。由于只能在保护方式下使用,因此又称为保护方式寄存器。
(1) 全局描述符表寄存器GDTR,是一个48位寄存器,用来存放全局描述符表GDT的32位线性基地址和16位的界限值。在全局描述符表中不仅包括有操作系统使用的描述符,而且还有所有任务使用的公用描述符。
(2) 中断描述符表寄存器IDTR,是一个48位寄存器,用来存放中断描述符表IDT的32位线性基地址和16位的界限值。
(3) 局部描述符表寄存器LDTR,是一个16位寄存器,用来存放局部描述符表LDT的16位选择符。另外还有一个隐含的描述符高速缓冲寄存器,用来存放LDT表描述符。
(4) 任务状态寄存器TR,是一个16位寄存器,用来存放任务状态段TSS的16位选择符。与之相应,也有一个隐含的描述符高速缓冲寄存器,用来存放任务状态段TSS的描述符。
段寄存器与系统地址寄存器一起为操作系统完成内存管理,多任务环境、任务保护提供硬件支持。

2.2.6 调试寄存器

有8个,各32位,如图2.5所示,表示为DR0~DR7。其中DR0~DR3用作线性断点地址寄存器,可保存4个断点地址。DR6用作断点状态寄存器,用来设置若干个状态标志。其中低4位分别表示4个断点处的调试状态。若进入调试状态,由硬件置1;退出调试状态时应由软件清0。另外还有3位,即BT,BS和BD,其中BT是与任务状态段中调试自陷位T相关的状态标志位,BS是与状态标志寄存器中的自陷标志TF相关的状态标志位,BD是当内部电路仿真使用的下一条指令将对8个调试寄存器中的任一个读/写时置1。DR7是断点控制寄存器,用来设置控制标志,控制断点的设置、设置条件、断点地址的有效范围以及是否进入异常中断等。DR4~DR5为Intel公司保留。

2.2.7 测试寄存器

有5个测试寄存器,各32位,如图2.5所示,表示为TR3~TR7。其中TR3~TR5用于片内Cache测试。TR6~TR7用来控制分页部件中的转换旁视缓冲存储器TLB的工作。TR6作为测试命令寄存器,用来存放测试控制命令,TR7作为数据寄存器,用来存放转换旁视缓冲存储器测试的数据。

2.2.8 控制寄存器

共有4个,各32位,用来存放全局性与任务无关的机器状态,
1) CR0用来存放系统控制标志或表示处理器的状态,共定义了11位,使用如下:
PE——保护方式允许位。置1,进入 保护方式;清0,进入实地址方式。
MP——监控协处理器位。置1,表示有协处理器。若在80486系统中运行80286或80386程序,该位置1;若运行80486程序,该位清0。
EM——模拟协处理器位。在运行80286或80386程序时,该位置1,若执行数值指令就会产生协处理器不能使用的异常中断;在80486SX系统中该位必须置1。
TS——任务切换位。每次任务转换,该位置1。在解释浮点算术运算指令时,对该位进行测试。清除任务切换标志指令CLTS可将该位清0。
ET——处理器扩展类型标志。该位置1,表示配置80387;否则表示未配置。
NE——数值异常事故位,用来控制浮点运算中未被屏蔽的异常故障。该位置1,允许报告浮点数值错;该位清0,且输入有效,则不予以报告。当NE清0,且输入无效时,数值错将会使处理器停止运行,并等待一次中断。
WP——写保护位,用来净化80486的页写保护机构,即保护用户级的那些页。该位置1,禁止管理级的写操作写入用户级的页上;该位清0,管理级可向用户级的页进行写入。
AM——对准屏蔽位,与状态标志AC配合使用,控制对数据的对准校验。该位置1,且AC也置1时,对用户级(CPL=3)访问的存储器单元进行对准校验,即边界检查,否则不校验。
NW——不透明写位,也称为不是写贯穿,用来控制Cache操作。该位清0,所有命中Cache的写操作将按写贯穿方式写入Cache,同时写入主存;该位置1(且CD=1)只写入Cache存储器,而不写入主存。
CD——允许Cache位,用来控制是否使用片内Cache。该位清0,允许使用内部Cache,这时若不命中,可对片内Cache存储器填充写入;该位置1,又不命中Cache时不能对Cache填充写入。若访问Cache命中,则Cache正常运行。若要彻底禁Cache,可用专门的指令INVD或WBINVD对片内Cache刷新。所谓刷新,是使片内Cache中的所有数据无效(即清0)。
PG——允许分页位。该位置1,使分页部件有效;该位清0,禁止分页部件工作。
(2) CR1未用。
(3) CR2为页故障线性地址寄存器,用来保存最后出现页故障的32位线性地址。只有当CR\-0中的PG位为1时,CR2才有意义。
(4) CR3为页目录基址寄存器,其中高20位存放页目录表的物理基地址。在低12位中有2位作为标志位,其余10位未用。 标志位作用如下:
PCD——禁止页高速缓冲位,该位置1,不对页进行高速缓冲操作。在不分页情况下的总线周期,该信号由PCD引脚输出,控制外部二级Cache的高速缓冲操作。
PWT——写贯穿位。在80486内部Cache中使用的是“写贯穿”方式,而外部二级Cache有的使用“写贯穿”方式,有的既可使用“写贯穿”方式又可使用“写回”方式。PWT=1,使片外二级Cache采用“写贯穿”方式,否则采用“写回”方式。
所谓“写贯穿”是向Cache写入数据的同时,也写入到主存中。“写回”是只有当Cache中的某一存储块被刷新时,才把这一存储块写回到主存中去。

2.2.9 浮点寄存器

由于在80486微处理器内部设有浮点运算器,因此在其内部有相应的寄存器,其中包括8个80位通用数据寄存器、1个48位指令指针寄存器、1个48位数据指针寄存器、1个16位控制字寄存器、1个16位状态字寄存器和1个16位标记字寄存器。这些寄存器主要用于浮点运算,其作用将在浮点运算中介绍。

2.2.10 CPU复位后各寄存器的值

复位(包括硬复位、软复位、初上电)后CPU各寄存器的值列于表2.1中。表中BIST为复位期间80486微处理机运行内存自检功能。
复位后CR0中的PE位为0(CR0为60000000H)。所以复位后CPU处于实地址工作方式。这时CS=0F000H,EIP=0FFF0H,所以CPU访问的第一个内存单元的物理地址为0FFFFFFF0H。

表2.1 复位后各寄存器的值 寄存器 初始值(BIST) 初始值(NO BIST)
EAX 0(通过) 不定
ECX 不定 不定
EDX 0400+版本ID 0400+版本ID
EBX 不定 不定
ESP 不定 不定
EBP 不定 不定
ESI 不定 不定
EDI 不定 不定
EFLAGS 0000002H 0000002H
EIP 0FFF0H 0FFF0H
ES 0000H 0000H
CS F000H F000H
SS 0000H 0000H
DS 0000H 0000H
续表 寄存器 初始值(BIST) 初始值(NO BIST)
FS 000H 000H
GS 000H 000H
IDTR 基值=0,界限=3FFH 基值=0,界限=3FFH
CR0 60000000H 60000000H
DR7 00000000H 00000000H
CW 037FH 不变
SW 0000H 不变
TW FFFFH 不变
FIP 00000000H 不变
FEA 00000000H 不变
FCS 0000H 不变
FDS 0000H 不变
FOP 000H 不变
FSTACK 不定 不变

2.3指令流水线操作

为提高运行速度和性能指标,CPU采用流水线技术。分为地址流水线和指令流水线。地址流水线将在第五章讨论,这里讨论指令流水线。
在80486微处理器中设有8KB内部Cache存储器、32字节预取指令队列、指令译码器、控制器及控制寄存器、执行部件,这就从硬件上支持了指令流水线操作。80486使用5个步骤的流水线技术,即指令预取PF、译码D1、译码D2、执行EX和结果写回WB,

一、指令预取PF
预取指令部件一次可从内部Cache取16字节的指令代码,送预取指令队列等候执行。在16个字节中平均有5条指令,这样就满足了译码部件的需要。一般来说,预取指令部件的操作与流水线其他步骤是相互独立的。在实际使用中,32字节的队列分成大小相等均为16字节的两个队列使用。只要有一个队列为空,预取部件就从Cache中取16字节的代码填入队列,这就保证了取指令与执行指令的并行操作。
二、D1
译码操作分为D1和D2两个阶段。亦称二级译码。其中D1是第一阶段,从指令代码中分解出操作码进行译码,找出第一条微指令代码的入口地址送控制ROM。如果指令中带有操作数,同时检索出有关计算地址的代码,送分段部件。
对于多字节指令,一次最多可以处理3个字节。根据80486的体系结构,任何一条指令的长度都可以通过前3个字节(包括指令前缀)确定。在对前3个字节译码时,D1译码器将后续字节引导到D2译码器,同时预取部件启动下一条指令进行译码。
对于带前缀的指令,需要增加一个时钟周期对前缀译码,这样D1阶段占两个时钟周期,可表示为D11和D12。对于一些双字节操作码的指令,有一个字节是0FH,如同前缀一样D1也需两个时钟周期。而绝大多数指令,D1阶段只需一个时钟周期。
三、D2
D2是译码的第二阶段。在这一阶段,由微代码控制器根据D1译码结果产生执行该指令的控制信号,并进行寻址方式的计算,即计算出存储器地址。在一个时钟周期内可对1~4字节的存储器位移量字段进行译码,或者对1~4字节的立即常数地址进行译码。若一条指令中既有存储器位移量字段,又有立即常数字段,D2阶段就需两个时钟周期。在其中的第1个时钟周期内,若有位移量,则对其译码;若有基地址,则加至基地址寄存器。对于变址,则需在第2个时钟周期进行变址计算。对于绝大多数指令,D2阶段只需一个时钟周期。
四、EX
流水线的第4个步骤是执行,即包括各种算术逻辑运算,还包括对Cache的访问和对寄存器的修改等。执行过程由微代码序列控制,所需时钟数随指令的不同而异,甚至可以用几十个时钟周期执行一条复杂的宏指令,或者处理一个复杂的数据结构。
在一条指令的执行过程中,主要执行步骤由微代码ROM中的微程序控制,而其他步骤由硬件逻辑电路控制。对于寄存器操作指令,在一个EX时钟内完成,并将结果送入目的寄存器。对于那些访问存储器的指令(包括转移指令),首先访问Cache,若命中,仅需一个时钟周期;若不命中,则访问主存,并对Cache填充写入,故须增加时钟周期。
五、WB
最后一个步骤是把结果写回到目的寄存器或目的存储器单元。如果是写回目的存储器单元,首先将结果送入片内Cache,同时还要送总线接口部件的写缓冲存储器。若Cache命中,立即写入;若不能命中,则写入主存。如果总线被占用,则延时等候,直到总线可以使用时写入为止。
对于绝大多数指令,上述5个步骤各需一个时钟周期。对于少数不能在一个时钟周期完成的步骤,则增加时钟周期。
由于多条指令并行执行,所以对80486来说,一条指令的平均执行时间为1�7~1�8个时钟周期。
Pentium CPU内部设有两条流水线,即U流水线和V流水线。每个流水过程由5个步骤组成,即预取指令、指令译码、地址生成、执行和写回。这两条流水线并行独立工作,其中U流水线负责所有整数和浮点指令的执行,而V流水线负责简单整数和FXCH(寄存器内容交换)类浮点指令的执行,这样就使CPU可同时执行两条指令。在执行过程中,一面对流水线中的一条指令译码,另一面由一个能预知下一条指令走向的分支目标缓冲器检查下一条指令能否并行执行。如果可以,两条指令同时进入流水线。
参考技术A 可以说是硬规定的
因为开机后进入的是实模式,所以才是你说的CS*16+EIP
但CPU内部电路给CS段的高12位A31~A20一直保持高电平
也就是1;
所以F000H*16=F0000H
F0000H+0000FFF0H=000FFFF0H
高12位为高电瓶 所以是FFFF0000H

其实主要是怕开机后指令跳到别的地方去,硬加的高电瓶

你可以看看 386 486intel 的处理器稳当;他门的望站有下载本回答被提问者采纳
参考技术B NASDAQ7E7说的比较准确了,顺便鄙视一下上面复制粘贴的。 参考技术C 这问题够高深的啊,看都看不懂~~~ 参考技术D F000H变换到FFFF0000H

以上是关于开机CPU执行的哪些指令?的主要内容,如果未能解决你的问题,请参考以下文章

Deepin电源管理和开机自动执行指令进入省电模式(CPUPOWER)

计算机加电后执行的第一条指令的地址是怎样形成的

计算机开机加电时,运行的第一条指令是

电脑在开机的时候都做了些什么

Linux配置开机自启动执行脚本都有哪些方法

如何从dos中修改电脑开机密码?求输入指令。