一条指令在cpu中的执行流程(理解CPU组成)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一条指令在cpu中的执行流程(理解CPU组成)相关的知识,希望对你有一定的参考价值。

参考技术A CPU :

1.寄存器;

2.控制器CU(Control Unit):

指令寄存器IR(InstructionRegister)、程序计数器PC(ProgramCounter)和操作控制器OC(OperationController);

3.ALU(算数逻辑运算单元),不包括寄存器;

4.总览

过程详述:

几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:取指令、指令译码、执行指令、访存取数、结果写回。

1.取指令阶段

取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。

程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增:若为单字长指令,则(PC)+1àPC;若为双字长指令,则(PC)+2àPC,依此类推。

2.指令译码阶段

取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。

在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。

在组合逻辑控制的计算机中,指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的微操作序列;在微程序控制的计算机中,指令译码器用指令操作码来找到执行该指令的微程序的入口,并从此入口开始执行。

在传统的设计里,CPU中负责指令译码的部分是无法改变的。不过,在众多运用微程序控制技术的新型CPU中,微程序有时是可重写的,可以通过修改成品CPU来改变CPU的译码方式。

3.执行指令阶段

在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。

此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。

例如,如果要求完成一个加法运算,算术逻辑单元ALU将被连接到一组输入和一组输出,输入端提供需要相加的数值,输出端将含有最后的运算结果。

4.访存取数阶段

根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。

此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。

5.结果写回阶段

作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取;在有些情况下,结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。

在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。

许多新型CPU可以同时取出、译码和执行多条指令,体现并行处理的特性。

一文理解CPU进行简单加法(计算机组成原理5.1CPU的功能和基本结构)

这篇文章真的是千呼万唤始出来!总结这部分知识点花了不少时间。
对不起好兄弟萌,我写得这么垃圾还拖更。

5.1.1CPU的功能

5.1.1.1 CPU的基本功能

指令控制:完成取指令,分析指令和执行指令的操作,即程序的顺序控制。
操作控制:一条指令由若干操作信号组成。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应部件,从而控制这些部件按指令的要求进行动作。
时间控制:对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供相应的控制信号。
数据加工:对数据进行算术和逻辑运算。
中断处理:对计算机运行过程中出现的异常情况和特殊请求进行处理。

5.1.1.2 运算器的功能

对数据进行加工。

5.1.1.3 控制器的功能

控制器协调并控制计算机个部件执行程序的指令序列,基本功能有取指令、分析指令、执行指令。
取指令:取指令时CPU自动形成下一条指令的存放地址,即PC + 1;每一条指令执行完毕CPU自动发出取指令的命令。
分析指令:对取得指令进行操作码译码,分析指令的要进行什么操作,以及对分析地址码,根据不同的数据寻址方式取得操作数有效地址。
PC指向加法程序的某一条指令
执行指令:根据分析指令得到的操作命令和操作数地址,形成操作信号控制序列。每条指令由多个不同的微操作执行,每个微操作对应一个控制信号,因此执行指令即为形成操作信号控制序列,控制设备完成相应操作的过程。每执行完毕一条指令,CPU会检查是否有中断信号需要处理,此时控制器对总线进行处和IO设备进行处理,如处理异常情况和特殊请求。
中断处理:管理总线和IO,处理异常情况和特殊请求。

5.1.2 CPU的基本结构

在这里插入图片描述

5.1.3 运算器的基本结构

在这里插入图片描述
算术逻辑单元:ALU,主要进行算术/逻辑运算。
暂存寄存器:暂存从主存读取来的数据,暂存寄存器对程序员是透明的。
累加寄存器:ACC,是一个通用寄存器,暂存ALU的运算结果,可以作为加法运算的一个输入端。
通用寄存器:上图中R0,R1,R2,R3即为通用寄存器,X86计算机中,名为AX、BX、CX、DX、SP。上图中的AH和AL,BH和BL等,意为AX,BX的高位和低位。通用寄存器保存操作数和各种地址信息。SP是堆栈指针,操作系统会给每个正在运行的程序分配一个堆栈来存放该程序产生的数据,SP作为该堆栈的栈顶指针。SP也被单独划分为特殊的专用寄存器
关于堆栈指针,可以与数据寻址中堆栈寻址联系起来:如下图,假设堆栈寄存器里存放的是某进程产生的返回值和参数等数据。寻址得到的操作数被输送到ALU参与加法运算,再返回到堆栈寄存器中。
在这里插入图片描述

程序状态字寄存器:PSW,也称为状态寄存器或者有的题目叫做标志寄存器,保留由算术逻辑运算或者测试指令产生的结果而建立的状态信息,如溢出标志OF,符号标志SF等。
移位器:对操作数或者运算结果进行移位。
计数器:控制乘除运算的操作步数。

运算器内部传送流动的两种方式
专用数据通路方式

根据指令执行过程中的数据和地址的流动方向安排连接线路。
在这里插入图片描述
假设R0,R1,R2,R3为一组通用寄存器,每个通用寄存器都有若干条专用数据通路与ALU连接,如假设R0可以存放16bit数据,则R0有16条数据通路与ALU连接。R0两侧都有数据通路与ALU连接,意为可以从A或B端输入数据。后续R1,R2,R3同理。
上图可以看出四个寄存器是同时向ALU输入数据的,因此在运算时会有数据冲突,为了解决这个问题。
解决专用数据通路方式中多个寄存器同时向ALU输送数据的问题:
方法一:使用多路选择器
在这里插入图片描述
假设C1的控制信号是00,C2的控制信号是01,则意为R0从左侧输入数据,R1从右侧输入数据,其余两个不输入数据。在ALU与一组通用寄存器之间使用多路选择器以达到控制寄存器内数据是输入的效果。

方法二:使用三态门
在这里插入图片描述
使用三态门以及不同的电信号以控制和选择寄存器内数据的输入。每一个数据通路使用一个三态门,三态门一侧输入端连接通用寄存器,另一侧输出端连接ALU的,还有一侧端口连接释放电信号的控制器,如寄存器R0out的三态门的电信号为高电平1时,三态门就可以通电,意味着R0的数据可以传送到ALU内参与运算,若三态门电信号为低电平0时,意味着寄存器R0的数据无法输入到ALU。

采用专用数据通路的方式传输数据,性能较高,不存在数据冲突的现象,但是实现需要付出代价较大。

CPU内部单总线方式:

将所有寄存器的输入端和输出端都连接到一条公共的通路上。
在这里插入图片描述
这种通过CPU内部总线的方式,由于参与计算的通用寄存器同时向ALU传输数据会产生数据冲突,因此在ALU其中一端设置暂存寄存器,暂存从寄存器读取来的数据。
假设需要寄存器R0和R1的数据参与运算,且运算结果放回R0,则
(1)先把R0out的三态门打开使它的数据传输到ALU输入端暂存寄存器,然后关闭R0的输出有效信号,打开R1的三态门使它的数据传输到ALU。
(2)接下来,ALU内部进行加法运算,在这个过程中,ALU持续计算且需要等待R0与R1输入的电信号稳定后才可输出计算结果返回到R0,因此,为了防止ALU在电信号稳定前输出错误的运算结果,还要在ALU输出端设置一个暂存寄存器以一个及三态门。
(3)电信号稳定后导通ALU输出端三态门,运算结果输出到内部总线,此时接通R0输入端三态门,运算结果返回R0。至此,一次运算完毕。
上述运算的过程,可以通过增加一个累加寄存器(ACC)和标志寄存器(PSW)来实现优化。ACC用来暂存ALU每次运算的结果,PSW用来保存每次运算结果的状态,如是否产生了进位,或者预算暖是否溢出等。

5.1.4 控制器的基本结构(与运算器一起理解)

在这里插入图片描述
图中控制单元CU包括:指令译码器,时许系统,微操作信号发生器。其余PC和IR,MAR,MDR都如上图所示构成。灰色为用户不可见的寄存器(不可编成),棕色为用户可见寄存器(可编程,如汇编语言)。
运行一次加法过程,假设操作数b在寄存器,操作数a在主存
(1)PC从内部总线中取得由MDR传输的指令A,PC取出的指令放到IR中,由IR解析获得操作码和地址码,地址码输出到内部总线,操作码传输到指令译码器,PC + 1。
(2)译码器解析的结果指挥微操作信号发生器,判断对应的微操作信号序列,同时由时序系统判断执行顺序,执行同时由PSW判断执行状态。
(3)假设操作码解析后意为从主存中取出操作数进行加法操作,则地址码是下一条指令的存放地址B。该地址码传输到MAR里,PSW判断操作无误,MAR的数据传输到地址总线,从主存单元中取出下一条指令B,并经过数据总线放入MDR。
(4)PSW判断操作无误,MDR中存放的指令传输到内部总线,经过内部总线,由PC取得指令B。
(5)PC取得指令B,PC + 1,并将指令B放入IR进行解析,IR解析完毕把操作码放入译码器,译码器解析意为从主存取得操作数a,地址码放入内部总线,等待MAR获取。
(6)MAR获取操作数a的存放地址并将该地址传输到地址总线,从主存单元取得操作数a,经过数据总线把a放入MDR,等待PSW判断。
(7)PSW判断无误,MDR中的操作数a放入内部总线,PSW判断无误,把a放入暂存寄存器,等待执行加法运算。
(8)三态门连通,把操作数b放入ALU,a和b进行运算,运算结果暂存到ACC。
(9)至此,一次加法运算完毕。
CPU执行指令的过程,均可通过这张图来帮助理解。
一次加法的基本运算
上述过程可以举个例子类比理解:
比如,工人甲在流水线上加工货物,甲收到通知信息A,A指示货物在某个仓库,需要甲去仓库取得货物B并进行加工,甲会去仓库取得货物B,然后带回流水线进行加工。
甲收到A消息的过程就是取得PC取得指令A以及IR进行译码操作的过程。
甲去仓库取货物B就是PC去主存寻得指令B的过程。
甲将B带回流水线加工,则是操作数a被放到MDR,以及进行加法运算的过程。

本想画漫画解释例子帮助理解,但是手残党表示心累…

以上是关于一条指令在cpu中的执行流程(理解CPU组成)的主要内容,如果未能解决你的问题,请参考以下文章

CPU内部组成结构及指令执行过程

CPU是怎么执行指令的?

开机CPU执行的哪些指令?

CPU是怎么执行指令的?

一文理解CPU进行简单加法(计算机组成原理5.1CPU的功能和基本结构)

一文理解CPU进行简单加法(计算机组成原理5.1CPU的功能和基本结构)