1、第六章 中央处理器6.2指令执行过程 程序在运行前装入到主存储器。要执行这个程序,CPU从主存一条一条地读取指令,依次执行。计算机主频的周期称为时钟周期。从一条指令启动到下一条指令启动的时间间隔称为指令周期。指令的执行过程中包含若干个操作步骤,每个基本操作的时间称为机器周期。不同指令包含的周期数取决于指令的功能。早期的计算机中,一个指令周期一般需要几个机器周期完成,一个机器周期需要几个时钟周期。新型计算机中,采用硬件并行技术以及简化的指令系统,使得平均指令周期可以等于甚至小于一个时钟周期,机器周期一般等于一个时钟周期。6.2指令执行过程 一条指令的执行过程,都要经由取指周期和执行周期。下面以图
2、6-1所示的计算机为例,研究典型的指令周期。(1)取指周期 取指周期需要根据程序计数器PC中的指令地址,从内存将指令读取到指令寄存器IR中。同时,由于程序计数器PC中的指令地址已经送出,需要自动加1得到下一条指令的地址。6.2指令执行过程 为完成这些功能,CPU的操作序列如下:1)PC-MAR;程序计数器中的指令地址送存储器地址寄存器MAR 2)MAR-M;存储器地址寄存器MAR中的地址送内存储器 3)M-MDR;存储器中取出的指令送到存储器数据寄存器MDR 4)PC+1-PC;程序计数器PC值自动加1 5)MDR-IR;指令从存储器数据寄存器MDR传送到指令寄存器IR6.2指令执行过程 由于
3、前4步的传输过程,使用的是不同的传输总线,所以可以同时执行。这样取指周期的操作序列可以表示为:取指周期的操作序列 1)PC-MAR-M-MDR 2)MDR-IR,PC 为完成每一步操作,需要对该操作涉及到的部件发送相应的控制信号。取指周期的控制信号序列表示为:1)PCout,MARin,MARout,RM,MDRin 2)MDRout,IRin,PC+16.2指令执行过程 取出指令后,根据指令的类型,指令执行周期的操作也不同。下面分别介绍几种典型的指令执行周期,如 非访存传送类指令执行周期 访存传送类指令执行周期 非访存运算类指令执行周期 访存运算类指令执行周期 控制指令执行周期6.2指令执行
4、过程(2)非访存传送类指令执行周期 如果指令寄存器IR中的指令为非访存传送类指令,则操作数在CPU内部的寄存器中,不需要访问存储器或外设,直接对寄存器操作就可以了。非访存传送类指令只需要一个机器周期就可以完成。6.2指令执行过程 例6-1当前指令为MOV R2,R1,写出该指令执行周期操作序列和控制信号序列。解:指令功能为将R1的数据传送到R2,其操作序列如下:1)R1-R2;寄存器R1的数据读出,传送到R2对应的控制信号序列如下:1)R1out,R2in6.2指令执行过程(3)访存传送类指令执行周期 如果指令寄存器IR中的指令为访存传送类指令,则要根据指令的寻址方式得到操作数的有效地址,再根
5、据有效地址访问存储器,得到操作数,再进行数据传送。访存传送类指令由于需要访问存储器,所以执行周期需要2个机器周期。6.2指令执行过程 例6-2 当前指令为MOV 20H,R2,写出该指令执行周期操作序列和控制信号序列。解:指令功能为将R2的数据传送到内存20H单元。指令执行时,要先将地址装入存储器地址寄存器MAR,再将数据装入存储器数据寄存器MDR,发“写”信号。指令代码在指令寄存器IR中,所以可以从IR的地址段部分获得地址。操作序列如下:1)IR(地址段)-MAR 2)R2-MDR-M控制信号序列如下:1)IRout,MARin,MARout 2)R2out,MDRin,MDRout,WM6
6、.2指令执行过程 例6-3 当前指令为MOV R1,R2,写出该指令执行周期操作序列和控制信号序列。解:指令的源操作数采用寄存器间接寻址方式。指令的功能是将R2的值作为内存单元地址,然后访问这个内存单元,将该内存单元的数据传送到R1寄存器。所以先要将R2的值装入存储器地址寄存器MAR,从内存读取数据,再将数据装入存储器数据寄存器MDR,再发送到R1。操作序列如下:1)R2-MAR-M-MDR 2)MDR-R1控制信号序列如下:1)R2out,MARin,MARout,RM,MDRin 2)MDRout,R1in6.2指令执行过程(4)非访存运算类指令执行周期 非访存运算类指令的运算操作数从寄存
7、器中取得,然后两个操作数要置于ALU的输入端暂存器,接着控制算术逻辑单元ALU完成某种运算,将运算结果存放到ALU输出端的暂存器中,之后再传送到目的地址。这类指令的执行周期可能需要多个机器周期。6.2指令执行过程 例6-4 当前指令为ADD R1,R2,写出该指令执行周期操作序列和控制信号序列。解:指令的功能是将R1和R2的数做加法运算,结果送到R1中。其操作序列如下:1)R1-Y 2)R2-ALU,Y-ALU,ALU-Z 3)Z-R1控制信号序列如下:1)R1out,Yin 2)R2out,Yout,+,Zin 3)Zout,R1in6.2指令执行过程(5)访存运算类指令执行周期 访存运算类
8、指令中,需要根据指令的寻址方式得到运算操作数的有效地址,再根据有效地址访问存储器,得到操作数。然后两个操作数要置于ALU的输入端暂存器,接着控制算术逻辑单元ALU完成某种运算,将运算结果存放到ALU输出端的暂存器中,之后再传送到目的地址。这类指令的执行周期最长,因为需要访问内存以及在运算器中运算。6.2指令执行过程 例6-5当前指令为ADD R1,R2,写出该指令执行周期操作序列和控制信号序列。解:指令中一个加数在R1中,一个加数需要通过R2寄存器间接寻址从内存读取。两个操作数加的结果传送到R1寄存器。其操作序列如下:1)R2-MAR-M-MDR 2)MDR-Y 3)R1-ALU,Y-ALU,
9、ALU-Z 4)Z-R1控制信号序列如下:1)R2out,MARin,MARout,RM,MDRin 2)MDRout,Yin 3)R1out,Yout,+,Zin 4)Zout,R1in6.2指令执行过程(6)控制指令执行周期 转移指令是最常见的程序控制指令。转移指令分为条件转移指令、无条件转移指令。程序转移不再顺序取下一条指令,而是转到程序另外的指令去执行。所以转移指令的核心就是获得新的指令地址传送到程序计数器PC。无条件转移指令是在指令中提供下一条指令的地址。条件转移指令则还提供一个需要判断的条件,根据条件标志位确定下一条指令的地址。6.2指令执行过程 例6-6当前指令为采用相对寻址的无
10、条件转移指令JMP+5,写出该指令执行周期操作序列和控制信号序列。解:指令采用相对寻址,也就是说下一条指令的地址由当前程序计数器PC的值,加上指令中的相对量求得,再传送到PC中。其操作序列如下:1)PC-Y 2)IR(地址段)-ALU,Y-ALU,ALU-Z 3)Z-PC控制信号序列如下:1)PCout,Yin 2)IRout,Yout,+,Zin 3)Zout,PCin6.2指令执行过程 可以看出,每条指令的执行都是按周期产生各种控制信号,这些控制信号作用到相应的模块,产生相应的动作,完成指令功能。指令的机器周期划分要根据指令的功能,结合数据总线进行安排。安排操作序列时要注意以下几点:1)有的操作信号之间有严格的时序关系,有的没有。对于有时序关系的信号,不能破坏其前后相邻的时序关系。2)对不同控制对象的不同操作,如果在一个节拍内能够执行,应尽可能安排在同一个节拍内。这样可以节省时间。3)总线上数据不能有冲突,要严格控制送到总线的数据的时序。