CPU执行方式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU执行方式相关的知识,希望对你有一定的参考价值。
参考技术A CPU的工作分为 5 个阶段:取指令阶段、指令译码阶段、执行指令阶段、访存取数和结果写回。1、取指令(IF,instruction fetch),即将一条指令从主存储器中取到指令寄存器的过程。
2、指令译码阶段(ID,instruction decode),取出指令后,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类 别以及各种获取操作数的方法。
3、执行指令阶段(EX,execute),具体实现指令的功能。CPU的不同部分被连接起来,以执行所需的操作。
4、访存取数阶段(MEM,memory),根据指令需要访问主存、读取操作数,CPU得到操作数在主存中的地址,并从主存中读取该操作数用于运算。
5、结果写回阶段(WB,write back),作为最后一个阶段,结果写回阶段把执行指令阶段的运行结果数据“写回”到某种存储形式。
扩展资料:
CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。
1、控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器 OC(Operation Controller)等,对协调整个电脑有序工作极为重要。
2、运算单元,是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。
3、存储单元,包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。
一 CPU的原始工作模式
在了解CPU工作原理之前,我们先简单谈谈CPU是如何生产出来的。CPU是在特别纯净的硅材料上制造的。一个CPU芯片包含上百万个精巧的晶体管。人们在一块指甲盖大小的硅片上,用化学的方法蚀刻或光刻出晶体管。因此,从这个意义上说,CPU正是由晶体管组合而成的。简单而言,晶体管就是微型电子开关,它们是构建CPU的基石,你可以把一个晶体管当作一个电灯开关,它们有个操作位,分别代表两种状态:ON(开)和OFF(关)。这一开一关就相当于晶体管的连通与断开,而这两种状态正好与二进制中的基础状态“0”和“1”对应!这样,计算机就具备了处理信息的能力。
但你不要以为,只有简单的“0”和“1”两种状态的晶体管的原理很简单,其实它们的发展是经过科学家们多年的辛苦研究得来的。在晶体管之前,计算机依靠速度缓慢、低效率的真空电子管和机械开关来处理信息。后来,科研人员把两个晶体管放置到一个硅晶体中,这样便创作出第一个集成电路,再后来才有了微处理器。
看到这里,你一定想知道,晶体管是如何利用“0”和“1”这两种电子信号来执行指令和处理数据的呢?其实,所有电子设备都有自己的电路和开关,电子在电路中流动或断开,完全由开关来控制,如果你将开关设置为OFF,电子将停止流动,如果你再将其设置为ON,电子又会继续流动。晶体管的这种ON与OFF的切换只由电子信号控制,我们可以将晶体管称之为二进制设备。这样,晶体管的ON状态用“1”来表示,而OFF状态则用“0”来表示,就可以组成最简单的二进制数。众多晶体管产生的多个“1”与“0”的特殊次序和模式能代表不同的情况,将其定义为字母、数字、颜色和图形。举个例子,十进位中的1在二进位模式时也是“1”,2在二进位模式时是“10”,3是“11”,4是“100”,5是“101”,6是“110”等等,依此类推,这就组成了计算机工作采用的二进制语言和数据。成组的晶体管联合起来可以存储数值,也可以进行逻辑运算和数字运算。加上石英时钟的控制,晶体管组就像一部复杂的机器那样同步地执行它们的功能。
CPU的内部结构
现在我们已经大概知道CPU是负责些什么事情,但是具体由哪些部件负责处理数据和 执行程序 呢?
1.算术逻辑单元ALU(Arithmetic Logic Unit)
ALU是运算器的核心。它是以全加器为基础,辅之以 移位寄存器 及相应控制逻辑组合而成的电路,在控制信号的作用下可完成加、减、乘、除四则运算和各种逻辑运算。就像刚才提到的,这里就相当于工厂中的生产线,负责运算数据。
2.寄存器组 RS(Register Set或Registers)
RS实质上是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途。通用寄存器的数目因微处理器而异
您在浏览本页面时使用的计算机便通过微处理器来完成其工作。微处理器是所有标准计算机的心脏,无论该计算机是桌面计算机、服务器还是笔记本电脑。您正在使用的微处理器可能是奔腾、K6、PowerPC、Sparc或者其他任何品牌和类型的微处理器,但是它们的作用大体相同,工作方式也基本类似。
3.控制单元(Control Unit)
正如工厂的物流分配部门,控制单元是整个CPU的指挥控制中心,由指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和 操作控制器 0C(Operation Controller)三个部件组成,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过 操作控制器 OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍 脉冲发生器 、控制矩阵、 时钟脉冲 发生器、 复位电路 和启停电路等控制逻辑。
4.总线(Bus)
就像工厂中各部位之间的联系渠道,总线实际上是一组导线,是各种公共信号线的集合,用于作为电脑中所有各组成部分传输信息共同使用的“公路”。直接和CPU相连的总线可称为局部总线。其中包括: 数据总线DB(Data Bus)、地址总线AB(Address Bus) 、控制总线CB(Control Bus)。其中,数据总线用来传输数据信息;地址总线用于传送CPU发出的地址信息;控制总线用来传送控制信号、时序信号和状态信息等。
CPU的工作流程
由晶体管组成的CPU是作为处理数据和 执行程序 的核心,其英文全称是:Central Processing Unit,即中央处理器。首先,CPU的内部结构可以分为控制单元,逻辑运算单元和存储单元(包括内部总线及缓冲器)三大部分。CPU的工作原理就像一个工厂对产品的加工过程:进入工厂的原料(程序指令),经过物资分配部门(控制单元)的调度分配,被送往生产线(逻辑运算单元),生产出成品(处理后的数据)后,再存储在仓库(存储单元)中,最后等着拿到市场上去卖(交由应用程序使用)。在这个过程中,我们注意到从控制单元开始,CPU就开始了正式的工作,中间的过程是通过逻辑运算单元来进行运算处理,交到存储单元代表工作的结束。
数据与指令在CPU中的运行
刚才已经为大家介绍了CPU的部件及基本原理情况,现在,我们来看看数据是怎样在CPU中运行的。我们知道,数据从输入设备流经内存,等待CPU的处理,这些将要处理的信息是按字节存储的,也就是以8位二进制数或8比特为1个单元存储,这些信息可以是数据或指令。数据可以是二进制表示的字符、数字或颜色等等。而指令告诉CPU对数据执行哪些操作,比如完成加法、减法或移位运算。
我们假设在内存中的数据是最简单的原始数据。首先,指令指针(Instruction Pointer)会通知CPU,将要执行的指令放置在内存中的存储位置。因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器IR中拿来指令,翻译成CPU可以执行的形式,然后决定完成该指令需要哪些必要的操作,它将告诉算术逻辑单元(ALU)什么时候计算,告诉指令读取器什么时候获取数值,告诉指令译码器什么时候翻译指令等等。
假如数据被送往算术逻辑单元,数据将会执行指令中规定的算术运算和其他各种运算。当数据处理完毕后,将回到寄存器中,通过不同的指令将数据继续运行或者通过DB总线送到数据缓存器中。
基本上,CPU就是这样去执行读出数据、处理数据和往内存写数据3项基本工作。但在通常情况下,一条指令可以包含按明确顺序执行的许多操作,CPU的工作就是执行这些指令,完成一条指令后,CPU的控制单元又将告诉指令读取器从内存中读取下一条指令来执行。这个过程不断快速地重复,快速地执行一条又一条指令,产生你在显示器上所看到的结果。我们很容易想到,在处理这么多指令和数据的同时,由于数据转移时差和CPU处理时差,肯定会出现混乱处理的情况。为了保证每个操作准时发生,CPU需要一个时钟,时钟控制着CPU所执行的每一个动作。时钟就像一个节拍器,它不停地发出脉冲,决定CPU的步调和处理时间,这就是我们所熟悉的CPU的标称速度,也称为主频。主频数值越高,表明CPU的工作速度越快。
如何提高CPU工作效率
既然CPU的主要工作是执行指令和处理数据,那么工作效率将成为CPU的最主要内容,因此,各CPU厂商也尽力使CPU处理数据的速度更快。
根据CPU的内部运算结构,一些制造厂商在CPU内增加了另一个算术逻辑单元(ALU),或者是另外再设置一个处理非常 大和 非常小的数据浮点运算单元(Floating Point Unit,FPU),这样就大大加快了数据运算的速度。
而在执行效率方面,一些厂商通过流水线方式或以几乎并行工作的方式执行指令的方法来提高指令的执行速度。刚才我们提到,指令的执行需要许多独立的操作,诸如取指令和译码等。最初CPU在执行下一条指令之前必须全部执行完上一条指令,而现在则由分布式的电路各自执行操作。也就是说,当这部分的电路完成了一件工作后,第二件工作立即占据了该电路,这样就大大增加了执行方面的效率。
另外,为了让指令与指令之间的连接更加准确,现在的CPU通常会采用多种预测方式来控制指令更高效率地执行。
中央处理器
王道考研计算机组成原理第五章中央处理器
1、CPU的功能和基本结构
CPU由运算器和控制器构成,其主要功能有:
- 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
- 操作控制。一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
- 时间控制。对各种操作加以时间上的控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
- 数据加工。对数据进行算术和逻辑运算。
- 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。
运算器主要是对数据进行加工,控制器协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令、中断处理
- 取指令:自动形成指令地址;自动发出取指令的命令。
- 分析指令:操作码译码(分析本条指令要完成什么操作);产生操作数的有效地址。
- 执行指令:根据分析指令得到的"操作命令"和"操作数地址",形成操作信号控制序列,控制运算器、存储器以及I/O设备完成相应的操作。
- 中断处理:管理总线及输入输出;处理异常情况(如掉电)和特殊请求(如打印机请求打印一行字符)。
1.1、运算器的基本结构
1.1.1、专用数据通路方式
运算器的核心就是ALU算数逻辑单元,算术逻辑单元:主要功能是进行算术/逻辑运算,很多时候我们会把要运算的数据提前存放在某些寄存器当中,所以运算器还会提供通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
如上图,共给出了4个通用寄存器编号为R0-R3,AH-AL指的是AX通用寄存器的高位和低位,BH-BL也是类似。寄存器里面的内容既有可能作为输入数据A,也有可能作为输入数据B,所以每个寄存器需要两组线路来完成数据的传输。每个寄存器和ALU之间都有一个专门的数据通路,称为专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。(只要两个部件之间有数据的流动,那么我们就在这两个部件之间建立一个专门的连接线路)
- 专用数据通路方式的优点:性能较高,基本不存在数据冲突现象,但结构复杂,硬件量大,不易实现。
问题:
- 部件多的多,连线也会多会变复杂
- 如果直接用导线连接,相当于多个寄存器同时并且一直向ALU传输数据
解决方法:
- 使用多路选择器(MUX),根据控制信号选择一路输出
- 使用三态门,可以控制每一路是否输出
- 如上左图,若采用多路选择器MUX,MUX会根据控制信号来决定让哪个寄存器的数据通过成为A。
- 如上右图,若采用三态门,每一个三态门可以控制一条路是否通过,每个小三角代表一个三态门,每个三态门有三个接口,第一个就是输入的接口,第二个接口是输出的接口,正常情况下三态门是不连通的,第三个接口就是控制其是否连通。如:R0out为1时R0中的数据输出到A端,R0out为0时R0中的数据无法输出到B端
1.1.2、CPU内部单总线方式
CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。
在CPU的内部设置一条总线,所有寄存器都连接到这条总线上,如上图,R0out为1的时候R0的数据会被输出到这条数据总线上,若我们想把R0的数据复制一份到R2上,我们只需要让R2in为1,这样R2的输入通路(绿色线)会被连通。out是输出信号,in是输入信号。
CPU内部单总线方式优点:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。例如我们要对R0和R1的数据进行加法操作, R0和R1的数据同时送到总线上, ALU无法判断A和B是什么值。所以我们给其中一端加了一个暂存寄存器,这样我们将R0的数据先送到数据总线,再送到暂存寄存器当中,接下来在将R1的数据送到数据总线再送到B就不会产生冲突。
暂存寄存器用于暂存从主存读来的数据,这个数据不能存放在**通用寄存器(R0、R1、R2、R3)**中,否则会破坏其原有内容。如:两个操作数分别来自主存和R0,最后结果存回R0,那么从主存中取来的操作数直接放入暂存暂存器,而不放入通用寄存器,这样就不会破坏运算前R0的内容。同时在ALU之后也放一个暂存寄存器,这样当R0送到总线上的信号稳定之后,ALU会把计算的结果先放到暂存寄存器,等ALU的结果稳定之后再送回数据总线,将结果放回R0。
- 当然,为了方便,我们还可以给暂存寄存器增加一些功能使之变成移位寄存器、累加寄存器等。
- 当然我们也可以直接在R0寄存器上方再放一个累加寄存器ACC:用于暂时存放ALU运算的结果信息,用于实现加法运算
- 还可以再放一个程序状态寄存器:保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OP),符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW中的这些位参与并决定微操作的形成。
- 运算器还要提供移位器:对运算结果进行移位运算。
- 运算器还要提供计数器:控制乘除运算的操作步数。
1.2、控制器的基本结构
上图中,左边是运算器,右边是控制器,控制器组成如下:
- 程序计数器PC:用于指出下一条指令在主存中的存放地址。CPU就是根据PC的内容去主存中取指令的。因为程序中指令(通常)是顺序执行的,所以PC有自增功能。
- 指令寄存器IR:指令取出后,会放入指令寄存器当中,所以指令寄存器用于保存当前正在执行的那条指令。指令的地址码会被输送到总线上。
- 指令译码器ID:仅对操作码字段进行译码,向控制器提供特定的操作信号。控制信号控制不同的微操作。
- 微操作信号发生器:根据IR的内容(指令)、PSW的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。
- 时序系统:用于产生各种时序信号,它们都是由统一时钟(CLOCK)分频得到。
- 存储器地址寄存器MAR:用于存放所要访问的主存单元的地址。
- 存储器数据寄存器MDR:用于存放向主存写入的信息或从主存中读出的信息。
取出指令之后,会放入指令寄存器IR当中,指令的地址码指明了操作数的存放地址,所以地址码的信息需要输出到内部总线上,而操作码部分会送给指令译码器ID,译码器的某个输出端被选通,这样就可以判断当前指令类型,进而决定接下来执行的是什么微操作,所以译码器的输出信号会作为微操作信号发生器的输入信号,微操作执行要有先后次序,所以控制器还提供时序系统产生时序信号,再根据PSW标志,就可以确定下一个微操作到底是什么。
假如当前的指令地址码直接指明了操作数在内存中的存放地址,那么微操作信号发生器需要给AdIRout有效信号,把地址输出到内部总线,同时给MARin有效信号,这样这个地址信息才可以输入到MAR当中,MAR中的地址信息需要通过地址总线传送给主存,然后主存根据地址信号去查找相应的主存单元,找到数据之后主存通过数据总线会将其放到MDR当中,这样就完成了对某个主存地址的读操作。MDRinE表示外部总线输入线路是否有效,MDRin表示CPU内部总线输入线路是否有效。MDRoutE和MDRout相同。
运算器主要由ALU和一系列寄存器组成,控制器主要由一系列寄存器和控制单元CU组成,CPU内部有些寄存器是用户可见的,有些是用户不可见的,用户可见的意思是说程序员可以通过汇编语言来改变某一些寄存器内部的值,如上图,用户可见的寄存器用灰色颜色标注。
总的来说,CPU由ALU、寄存器、CU、中断系统组成。
2、指令执行过程
2.1、指令周期
指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。
一个指令周期可以被划分为取指周期和执行周期两个部分,其中取指周期会根据PC当前所指向的位置取出当前要执行的这一条指令,并且PC+1指向下一条应该执行的指令,另外还会对指令进行译码,也就是对指令进行分析,之后执行指令,当执行完成之后就可以取下一条指令,也就是进入下一个指令周期。所以:一个指令周期至少要由取指周期和执行周期两个部分组成。指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。
- 例如上图,取指令会消耗一个机器周期,执行指令会消耗一个机器周期
- 一个机器周期又包含若干时钟周期(也称为节拍、T周期或CPU时钟周期,它是CPU操作的最基本单位)。
CLK指的是时钟脉冲,如上图红色方波就是一个时钟脉冲,例如CPU的主频是3.0GHz,意味着CPU每秒可以发射3.0G次的时钟周期,我们取指令的过程需要分为几个微操作的步骤来执行,如果取指令的过程需要4个微操作,那就意味着取指令需要消耗4个时钟周期,如上图,T0到T3共4个时钟周期分别执行了4个微操作之后,我们才完成了取指令这个动作。
- 取出指令之后有可能需要对形式地址进行转换,转换成有效地址也需要消耗若干个时钟周期,如上图消耗了4个时钟周期用来取有效地址
- 执行指令又需要若干个微操作,如上图消耗了4个时钟周期用来执行指令。
- 完成某一个完整的子工作所需要的时间就是一个机器周期,一个机器周期需要由多个时钟周期组成。如果说每一个子工作所需要消耗的时钟周期数都是相同的,那么每一个子工作所需要消耗的机器周期也是相同的,这种CPU就是定长的机器周期。
- 但是对于取指令子工作和执行指令子工作所需要的机器周期可能是不相同的,取指令需要进行访存,可能执行指令不需要进行访存,这种CPU就是不定长的机器周期。
每个指令周期内机器周期数可以不等,每个机器周期内的节拍(时钟周期)数也可以不等。
- 假设CPU要执行的是空指令NOP,也就是让CPU什么也不干,所以只需要取指周期,因此空指令的指令周期只做了取指令和分析指令这一件事,也就是空指令的指令周期只包含一个机器周期
- 假设CPU要执行的是加法指令ADD,所以需要取指周期和执行周期,加法指令的指令周期包含两个机器周期
- 假设CPU要执行的是乘法指令MUL,所以需要取指周期和执行周期,乘法指令的指令周期包含两个机器周期。乘法本质是多次加法,所以执行指令周期更长
- 假设CPU要执行的是具有间接寻址的指令,所以需要取指周期、间址周期、执行周期,这条指令的指令周期包含三个机器周期
- 间址周期的任务是取操作数的有效地址。
- 假设CPU要执行的是具有中断周期的指令,所以需要取指周期、间址周期、执行周期、中断周期,这条指令的指令周期包含四个机器周期
- 中断周期的任务是处理中断请求
2.2、指令周期流程
- 从主存当中取出指令:这段时间称为取指周期
- 如果指令的地址码部分采用了间接寻址,那么我们就需要间址周期
- 如果指令地址码部分没有采用间接寻址,那么直接进入执行周期
- 指令执行结束之后,会例行检查是否有中断信号需要处理,若有中断信号需要处理那么就进入中断周期;否则这个指令的指令周期就结束,会进入下一条指令的指令周期
思考:取值周期、间址周期、执行周期、中断周期CPU做的事情是不一样的,那么CPU如何区分当前到底处于哪个周期呢?
为了解决上述问题,我们设置4个触发器,一个触发器可以存放一个二进制位0或者1,我们可以设置4个触发器来分别表示当前处于哪个周期:
- 如果当前处于取值周期,那么FE触发器的值设为1,其余触发器设为0
- 取值周期结束后进入间址周期,那么IND触发器的值设为1,其余触发器设为0
- 四个工作周期都有可能有CPU访存操作,只是访存的目的不同。
- 取指周期是为了取指令
- 间址周期是为了取有效地址
- 执行周期是为了取操作数
- 中断周期是为了保存程序断点
我们来探讨在四个周期分别要做什么事情:
2.3.1、取指周期
取指周期的任务是根据PC中的内容从主存储器中取出指令代码并存放在IR中。
- 当前指令地址送至存储器地址寄存器,记做:(PC) → MAR
- PC -①- MAR -②- 地址总线 -③-主存储器
- CU发出控制信号,经控制总线传到主存,这里是读信号,记做:1 → R
- CU发出读命令 -④- 控制总线 -⑤- 主存储器
- 主存储器有两个接口:读R和写W接口,给R接口输送高电平1,就表示主存储器需要进行读操作
- 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
- MAR指明了当前要取出的指令存放在什么地址,这个地址信息通过地址总线送给主存储器,我们读出这个地址相应的数据,意味着我们读出了接下来要执行的这条指令,这条指令会通过数据总线送到MD R
- M指的是Memory,主存当中MAR所指向的数据放到MDR当中
- 将MDR中的内容(此时是指令)送入IR,记做:(MDR) → IR
- 主存储器 -⑥- 数据总线 -⑦- MDR -⑧- IR
- CU发出控制信号,形成下一条指令地址,记做:(PC)+1 → PC
- CU发出控制信号 -⑨- PC+1
2.3.2、间址周期
间址周期的任务是取操作数的有效地址。
- 将指令的地址码送入MAR,记做:Ad(IR) → MAR或Ad(MDR) → MAR
- Ad(IR) -①- MAR -②- 地址总线 -③-主存储器
- 之所以也可以将MDR里的地址放入MAR当中,是因为我们在取指令的时候是先将指令放入MDR,然后复制一份给IR
- CU发出控制信号,启动主存做读操作,记做:1 → R
- CU发出读命令 -④- 控制总线 -⑤- 主存储器
- 将MAR所指主存中的内容经数据总线送入MDR,记做:M(MAR) → MDR
- 主存 -⑥- 数据总线 -⑦- MDR(存放有效地址)
- 将有效地址送至指令的地址码字段,记做:(MDR)→ Ad(IR)
2.3.3、执行周期
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
2.3.4、中断周期
假设当前程序由指令1、指令2、指令3、指令4组成,假设我们正在执行指令2,那么PC的值会指向指令3,指令2执行结束之后会进行中断检查,如果此时有中断信号需要处理,那么在执行了指令2之后就需要暂停执行当前程序,转而去执行处理这个中断的中断处理程序,假设这个中断处理程序是由指令x、指令y、指令z组成,这就意味着指令2执行结束之后会去执行中断处理程序的指令x,指令y、指令z,执行完中断处理程序之后,我们又需要回来继续执行指令3,为了保证中断处理程序执行之后我们还能找到指令3的位置,因此我们需要将当前程序的中断点保存,本质上就是要保存PC的值,因为PC指向的就是指令3。(本质就是将PC的值压入栈顶)
中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。中断周期的任务是处理中断请求
- CU控制将SP减1,修改后的地址送入MAR。记做:(SP)-1 → SP,(SP) → MAR。本质上是将断点存入某个存储单元,假设其地址为a,故可记做:a → MAR
- SP -①- MAR -②- 地址总线 -③- 主存储器
- CU发出控制信号,启动主存做写操作,记做:1 → W
- CU发出写命令 -④- 控制总线 -⑤- 主存储器
- 将断点(PC内容) 送入MDR,记做:(PC) → MDR
- PC -⑥- MDR -⑦- 数据总线 -⑧- 主存储器(程序断点存入主存储器)
- CU控制将中断服务程序的入口地址(由向量地址形成部件产生)送入PC,记做:向量地址→ PC)
- CU(中断服务程序的入口地址) -⑨- PC
- PC开始指向指令3,我们将PC指向指令3的中断点保存至主存储器,然后修改PC的只让其指向中断处理程序的指令x
2.3、指令执行方案
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
- 单指令周期:对所有指令都选用相同的执行时间来完成。指令之间串行执行,指令周期取决于执行时间最长的指令的执行时间。
- 缺点:对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度。
- 多指令周期:对不同类型的指令选用不同的执行步骤来完成。指令之间串行执行,即下一条指令只能在前一指令执行完成后才能启动。可选用不同个数的时钟周期来完成不同指令的执行过程。
- 缺点:需要更复杂的硬件设计。
- 流水线方案:在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
- 指令之间并行执行。
3、数据通路
数据通路:数据在功能部件之间传送的路径称为数据通路,数据通路描述了信息从哪里开始、中间经过哪些部件、最后传到哪里。控制信号是由控制部件产生的,对于各种类型的寄存器来说,有两种控制信号:1.数据输入 2.数据输出,这些信号都是由控制器发出的,所以ACCin、ACCout 、R0in、R0out ,所有的控制信号事实上都是和微操作信号发生器有对应的连线,微操作信号发生器发出不一样的信号就可以使得各个寄存器之间有数据的流动。
如上图数据通路采用了CPU内部单总线方式
- CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共通路上,这种结构比较简单,但数据传输存在较多的冲突现象,性能较低。连接各部件的总线只有一条时,称为单总线结构。CPU中有两条或更多的总线时,构成双总线结构或多总线结构。
- CPU内部三总线方式:将所有寄存器的输入端和输出端都连接到多条公共通路上,相比之下单总线中一个时钟内只允许传一个数据,因而指令执行效率很低,因此采用多总线方式,同时在多个总线上传送不同的数据,提高效率。
- 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能较高,但硬件量大。
3.1、CPU内部单总线方式
数据流动大致上分为三类:
- 寄存器与寄存器之间的流动
- 寄存器与主存之间的流动
- 寄存器与ALU算数逻辑单元之间的流动
- 内部总线是指同一部件,如CPU内部连接各寄存器及运算部件之间的总线
- 系统总线是指同一台计算机系统的各部件,如CPU、内存、通道和各类I/O接口间互相连接的总线。
- 寄存器与寄存器之间数据传送
- 比如把PC内容0送至MAR,实现传送操作的流程及控制信号为:
- (PC)→Bus PCout有效,PC内容送到总线Bus
- Bus→MAR MARin有效,总线内容送MAR
- 也可写为:(PC)→Bus→MAR
- 也有的教材写为:PC→Bus→MAR
- 比如把PC内容0送至MAR,实现传送操作的流程及控制信号为:
- 主存与CPU之间的数据传送
- 比如CPU从主存读取指令,实现传送操作的流程及控制信号为:
- (PC)→Bus→MAR PCout和MARin有效,指令地址→MAR
- 1→R CU向主存发读命令(通过控制总线发出,图中红线)
- MEM(MAR)→MDR MDRinE有效,将MAR所指主存中的内容送到MDR
- MDR→Bus→IR MDRout和IRin有效,指令→IR
- 比如CPU从主存读取指令,实现传送操作的流程及控制信号为:
从主存当中读取指令,PC指明了我们要读取的指令存放的地址,所以刚开始将PC的内容放到MAR中,接下来对主存进行读操作,应该读的地址存放在MAR当中,MAR是通过地址总线传送给主存的(事实上应该有一个控制信号控制MAR的内容送到主存,但是图中没画),接下来主存根据MAR所指示的地址读出相应的数据,然后把这个数据放到MDR当中(图中绿色数据线),接下来将MDR的数据放入IR当中。
- 执行算术或逻辑运算
- 比如一条加法指令,微操作序列及控制信号为:
- Ad(IR)→Bus→MAR MDRout和MARin有效 或AdIRout和MARin有效
- 1→R CU发读命令
- MEM(MAR)→数据线→MDR MDRinE有效
- MDR→Bus→Y MDRout和Yin有效,操作数→Y
- (ACC)+(Y)→Z ACCout和ALUin有效,CU向ALU发送加命令
- Z→ACC Zout和ACCin有效,结果→ACC
- 比如一条加法指令,微操作序列及控制信号为:
当我们在执行算数或者逻辑运算时,我们的数据有可能流向ALU的,比如执行一条加法指令,其中一个数已经存放在ACC里面了,而另一个操作数会由加法指令直接指明地址,所以首先根据指令的地址码部分传送到MAR当中,要实现这个操作我们要保证IRin和MARin有效,当然也可以让MDRout和MARin有效(因为取值令结束之后MDR和IR当中都有地址信息),接下来主存进行读操作,主存根据MAR所指示的地址读出相应的数据,然后把这个数据放到MDR当中,之后先把这个数放到暂存寄存器Y当中。
3.2、例题🔥
-
ADD [目的操作数] [源操作数]
-
ADD (R0),R1
-
R1 没有括号,表示这个操作数就是直接存放在R1这个寄存器当中的
-
(R0) 有括号,表示需要进行一次间接寻址,R0里面存放的是这个操作数在主存当中的存储地址
-
结果又会放回目的操作数R0所指向的主存单元中
-
-
分析指令功能和指令周期
- 指令功能:((R0))+(R1)->(R0)
- R0有一个括号,表示先取出R0它里面的地址,再有一个括号,表示取出这个地址的数据
- R1有一个括号,表示把R1里面的数据直接取出来
- 结果放回R0所指向的主存单元当中,所以加一个括号
- 指令周期:取指周期、间址周期、执行周期
- 指令功能:((R0))+(R1)->(R0)
-
写出各阶段的指令流程
-
取指周期
- 任何一条指令的取指周期所做的事都是相同的,是公共操作,都是将PC的值放入MAR当中,此时控制器只需要要PCout和MARin有效即可
- 第二个操作根据MAR的地址从主存中取出数据,并将数据放入MDR当中。所以控制器只需要让MARout、MemR、、MDRinE有效
- 第三个操作将MDR中的数据放到IR当中,所以控制器只需要让MDRout、IRin有效
- 第四个操作将IR中的指令送给译码器
- (PC)+1 -> PC
-
间址周期
-
- 需要读出R0所指向的主存单元的数据,所以第一个操作将R0里面的值送到MAR中,所以控制器只需要让R0~out~、MAR~in~有效
- 第二个操作根据MAR的地址从主存中取出数据,并将数据放入MDR当中。所以控制器只需要让MAR~out~、MemR、、MDR~in~E有效
- 第三个操作将MDR中的数据先放到暂存寄存器Y中,所以控制器只需要让MDR~out~、Y~in~有效
- 执行周期:完成取数操作,被加数在主存中,加数已经放在寄存器R1中。
- 其中一个加法操作数已经被我们放到了Y暂存寄存器当中,而另一个操作数是在R1这个寄存器当中,所以控制器只需要让R1~out~、ALU~in~有效,同时CU控制单元向ALU发送ADD加法控制信号,我们将加法的结果放到Z寄存器当中
- 我们还要将结果放回R0所指向的主存单元当中,所以我们先将加法的结果先放到MDR当中,所以控制器只需要让Z~out~、MDR~in~有效
- 第三个操作将MDR的数据写回主存,所以控制器只需要MDR~out~E、MemW、MAR~out~有效
- 在间址周期阶段,我们已经将R0的内容写到MAR里面了,所以MAR此时就是存放的R0的数据,也就是说MAR已经指向了我们最终想要写入的那个主存单元,所以需要让MAR~out~有效
3.3、专用通路结构
如果我们想要取出一条指令,需要发出哪些控制信号?
- 指令的存放地址在PC当中,我们让PC的值先传到MAR当中,因此控制信号C0有效
- 根据MAR的地址去主存里面找,所以C1有效
- 主存接收到地址信息,还需要给主存发送读控制信号
- 主存收到了MAR的地址,也收到了读的信号,主存会把读到的数据发给MDR,所以C2有效
- 在指令执行之前要将指令送到指令寄存器IR,所以C3有效
- 每取出一条指令都要让PC+1
- 将指令的操作码部分送到CU,进行指令译码,所以C4有效(灰色字体,因为有的题不会给专门的控制信号,也就是不会给C4)
3.4、例题🔥
先来看第一题:
-
d能自动+1,所以d是PC
-
PC的内容是地址,会送给MAR,所以c是MAR
-
b与微操作信号发生器相连,需要把数据直接发送给微操作信号发生器的只有指令寄存器IR
-
与主存相连的寄存器是MAR和MDR,c是MAR,则a就是MDR
再来看第二题:
- 首先指令是在PC当中,所以先将PC的值放到MAR (PC)->MAR
- 接下来主存根据MAR提供的地址读出数据,并将读出的数据放入MDR当中 M(MAR)->MDR
- 将MDR中的指令发送到指令寄存器IR当中 (MDR)->IR
- 将IR中的指令操作码发送给微操作信号发生器 OP(IR)->微操作信号发生器
- (PC)+1->PC
再来看第三题:虽然问的是运算器和主存之间的通路,但是运算器并不具备存数据的能力,运算器想要使用的数据会被放到ACC累加寄存器当中,所以题目其实问的是ACC和主存之间的存取访问的数据通路
取数据:
- 设数据地址已经放入MAR当中,所以主存根据MAR的地址取出数据然后放入MDR M(MAR)->MDR
- MDR里面的数据流过ALU再送到ACC (MDR)->ALU->ACC
存数据:
- 把ACC里面的数据放到MDR (ACC)->MDR
- 把MDR数据存回主存 (MDR)->M(MAR)
再来看第四题:
- (X)->ACC 意思是把X里面的数据把它取到ACC里面
再来看第五题:
再来看第六题:
4、硬布线控制器
来学控制前之前,我希望大家记住一点:这tm确实够复杂,但是它不是重点,第五章的重点一定是 流水线、数据通路,硬布线、微程序控制器一般出个选择题。
4.1、硬布线控制器
在一个机器周期内,我们需要若干个微操作序列来完成这个机器周期内需要完成的一些事,每个机器周期又由若干个时钟周期组成,每个时钟周期又称为一个节拍,控制单元CU会在每个节拍内发出一个或者多个微命令用来完成对应的微操作,如:微命令1使得PCout、MARin有效,完成对应的微操作1 (PC)->MAR。
- 如上图,取指周期需要三个节拍,那么我们可以在第一个节拍内就完成两个微操作,也就是让CU同时发出两个微命令,让这两个微操作并行的进行,然后取指周期的第二个节拍和第三个节拍又分别完成另外的微操作
- 执行周期和中断周期T0节拍内什么也没做,也就是说执行周期和中断周期我们只需要两个节拍就可以完成操作,但是我们还是分配了三个节拍,这也就说明我们采用的是定长的机器周期,以可能出现的最大节拍数为准
- 取指周期和间址周期都使用了微操作2,所以同一个微操作可能在不同指令的不同阶段被使用
- 不同指令的执行周期所需节拍数各不相同。为了简化设计,选择定长的机器周期,以可能出现的最大节拍数为准(通常以访存所需节拍数作为参考)
- 若实际所需节拍数较少,可将微操作安排在机器周期末尾几个节拍上进行
任何一条指令在取指周期、间指周期、中断周期内执行的微操作所有的指令都是一样的,只有执行执行周期内微操作序列可能会出现一些区别,但是我们可以根据指令操作码,目前的机器周期(处于哪一个机器周期),节拍信号(处于第几个节拍),机器状态条件,就可以确定现在这个节拍下应该发出哪些微命令。
- 控制器的核心部件就是控制单元CU,如果控制单元采用硬布线的方式来设计,那么这种控制器就是硬布线控制器,我们要确定当前控制单元CU应该发出什么样的微命令,首先要参考指令操作码,将指令寄存器IR的n位操作码送给操作码译码器,n位操作码对应2n种状态,也就是有可能会出现2n种不一样的指令,如果此时的操作码全为0,那么就会使得0线连通。所以控制单元CU通过哪一个输入信号有效,来判断当前执行的指令是哪一条指令,这样CU就得到了指令操作码。
- 我们还需要将4个触发器的信息发送给CU,CU可以根据触发器来判断当前处于哪一个机器周期
- 通过节拍发生器给CU输入节拍信号,时钟部件会有规律的发出脉冲信号,每个脉冲信号就是一个时钟周期,节拍发送器接收到时钟部件发送的时钟周期之后,会选择让其中的某一根输出线连通,例如让T0连通,这样CU就可以得到当前处于第几个节拍,如上图节拍数是m+1,也就是一个机器周期会包含m+1个节拍,这个节拍信号是循环的发送的
- 最后把状态条件发送给CU
这样控制单元CU就可以确定在当前这个节拍下应该发出什么微命令。所以每个输出的控制信号对应一个微命令,也就是对应一个微操作,如上图每一条输出线对应一个微命令。如:要让C1对应微操作(PC)->MAR,则只需要将C1这根线接到PCout、MARin即可。
4.2、分析每个阶段的微操作序列
无论是什么指令,取指周期、间址周期都需有上图微操作命令。
-
取值周期(所有指令都一样)
- 先把PC的值放到MAR PC->MAR
- 对主存发送读信号 1->R
- 把MAR所指向的数据放入MDR M(MAR)->MDR
- 把MDR当中的指令放入 IR MDR->IR
- 把指令的操作码部分送给译码器ID OP(IR)->ID
- 取出当前指令把PC加一 (PC)+1->PC
-
间址周期(所有指令都一样)
- 指令里面的地址码是一个间接地址,先把指令的地址码放入MAR OP(IR)->MAR
- 对主存发送读信号 1->R
- 把MAR所指向的数据放入MDR M(MAR)->MDR
- 把有效地址EA替换原有的形式地址A MDR->Ad(IR)
-
执行周期(不同的周期各不相同)
- CLA ACC清零指令,把0放入ACC中 0->ACC
- LDA X 把数据加载到ACC,也就是取数指令
- 先把指令的地址码放到MAR Ad(IR)->MAR
- 对主存发送读信号 1->R
- 把MAR所指向的数据放入MDR M(MAR)->MDR
- 把数据转存到ACC MDR->ACC
- JMP X 无条件转移指令
- 先把指令的地址码放到PC Ad(IR)->PC
- 因为X指明了接下来那条指令的存放地址
- BAN X 条件转移指令,当ACC里面的内容为负时转移到X所指明的地址
- A0表示符号位,当ACC里面的值是负的时候 A0是1
4.3、安排微操作时序的原则
- 微操作的先后顺序不得随意更改
- 例如 (PC)->MAR,一定是在 M(MAR)->MDR之前完成
- 被控对象不同的微操作,尽量安排在一个节拍内完成
- (PC)->MAR 这个被控对象是寄存器
- 1->R 这个被控对象是主存
- 上述两个操作被控对象不同,所以可以放在一个节拍内完成
- 占用时间较短的微操作,尽量安排在一个节拍内完成,并允许有先后顺序
4.3.1、取指周期
-
(1)、(2)微操作可以放在一个节拍
-
(3)必须在(1)之后
-
(4)必须在(3)之后
-
(5)必须在(4)之后
-
只要将PC的值放入MAR,就可以让PC的值+1,所以(6)可以在(1)之后
- (1)、(2)微操作都可以在T0节拍内完成
- (3)、(6)微操作也没有前后依赖的关系,所以可以在T1节拍内完成
- (4)、(5)微操作执行时间很短,虽然有前后依赖关系,但是根据原则三可以安排在一个节拍T2内完成
- MDR、IR、ID这些都是CPU内部的部件,CPU内部部件的数据流动是很快的,所以CU可以让(4)、(5)微操作同时进行,数据就可以快速的从 MDR->IR->ID
4.3.2、间址周期
- (1)、(2)微操作都可以在T0节拍内完成
- (3)需要访存,所以需要在T1节拍内完成
- (4)安排在节拍T2内完成
4.3.3、执行周期
-
CLA 只需要一个微操作,这个指令的微操作很少,我们可以将其在末尾的节拍内完成,所以放到T2节拍
-
访存指令有可能进入间址周期,而非访存指令不需要访问主存,所以肯定没有间址周期。
5、微程序控制器
我们用高级语言写的代码会被翻译成与之对等的一系列机器指令,所以我们平常所说的程序,其实就是由一系列指令序列组成的,每一条指令的执行过程中这条指令又会被细分为一个个微操作,就是由一条微操作序列来完成一条指令。
-
微程序:由微指令序列组成,微指令序列由微操作组成,每一种指令对应一个微程序。
-
指令是对程序执行步骤的描述,微指令是对指令执行步骤的描述
-
因此当CPU在执行一条机器指令的时候,其实就是要执行这条机器指令所对应的微程序
-
微命令与微操作一 一对应(微命令是指执行微操作发出的控制信号,可以理解为微命令=微操作),微指令中可能包含多个微命令。机器指令和微程序也是一一对应的,一种机器指令会对应一个微程序,一个微程序会由多个微指令序列组成。所以可以说机器指令是对微指令的封装。
每一种微指令会对应相应的微操作,因此每一条微指令需要有 操作控制 的字段,用来表示这条微指令对应的微操作是哪几个,另外微指令还需要有 顺序控制 的字段,用来指明下一条微指令的地址。
5.1、微程序控制器的基本结构
在控制单元CU内部有:
- 控制寄存器CM,这个存储器用来存放各指令对应的微程序,控制存储器可用只读存储器ROM构成。
- 微地址寄存器CMAR,接收微地址形成部件送来的微地址,为在CM中读取微指令作准备。
- 微指令寄存器CMDR,用于存放从CM中取出的微指令,它的位数同微指令字长相等。
- 微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行
工作流程:
- 当CPU取到一条指令之后,首先把指令的操作码送到微地址形成部件,用来确定这条指令所对应的微指令序列的起始地址
- 然后再根据顺序逻辑的标志信息来确定这条微指令的存放地址,把微指令的地址放到CMAR当中
- 然后经过地址译码器的译码之后,就可以在控制存储器CM中选中CMAR所指向的那一条微指令
- 然后取出这条微指令,把它放到CMDR当中
- 微指令包含两个字段,用来指明下一条微指令的地址的字段我们称为下地址,把下地址的信息送给顺序逻辑,然后顺序逻辑再来决定下一条微指令的存放地址,从而继续送给CMAR
所有指令的取指周期、间址周期、中断周期所对应的微指令序列都一样,可以共享使用。
5.2、微程序控制器的工作原理
- 取指周期、间址周期、中断周期的微程序段通常是公用的,故如果某指令系统中有n条机器指令,则CM中微程序的个数至少是n+1个
- n个机器指令有n个执行周期的微程序段,同时还有公用的一个取指周期的微程序段
- 一些早期的CPU、物联网设备的CPU可以不提供间接寻址和中断功能,因此这类CPU可以不包含间址周期、中断周期的微程序段。所以是n+1,只算进去了公共的取指周期的微程序段
- 物理上,取指周期、执行周期看起来像是两个微程序,但逻辑上应该把它们看作一个整体。因此,"一条指令对应一个微程序"的说法是正确的
- 把取指周期、间址周期、执行周期、中断周期微程序段从逻辑上看作是一个整体
5.3、小结
5.4、微指令的设计
5.4.1、微指令的格式
有的微命令可以并行执行,因此一条微指令可以包含多个微命令
-
相容性微命令:可以并行完成的微命令。
-
互斥性微命令:不允许并行完成的微命令。
微指令分为三种:
- 水平型微指令:一条微指令能定义多个可并行的微命令。
- 优点:微程序短,执行速度快
- 缺点:微指令长,编写微程序较麻烦
- 垂直型微指令:一条微指令只能定义一个微命令,由微操作码字段规定具体功能
- 优点:微指令短、简单、规整,便于编写微程序
- 缺点:微程序长,执行速度慢,工作效率低
水平型微指令执行一条微指令可以并行的完成多个微命令,垂直型微指令执行一条指令只能完成一个微命令。
- 混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。
- 微指令较短,仍便于编写;微程序也不长,执行速度加 快
5.4.2、微指令的编码方式
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
-
直接编码(直接控制)方式
-
在微指令的操作控制字段中,每一位代表一个微操作命令,例如某位为"1"表示该控制信号有效
-
例如下图中最左边比特为1,表示(PC)->MAR这个微操作有效,最右边比特为1,表示1->R这个微操作有效
-
优点:简单、直观,执行速度快,操作并行性好
-
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控制存储器容量极大。
-
- 字段直接编码方式
- 将微指令的控制字段分成若干"段",每段经译码后发出控制信号
- 微命令字段分段的原则:
- 互斥性微命令(不能并行执行)分在同一段内,相容性微命令(可以并行执行)分在不同段内
- 每个小段中包含的信息位不能太多,否则将增加译码线路的复杂性和译码时间
- 一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段的长度为3位时,最多只能表示7个互斥的微命令,通常用000表示不操作。
- 优点:可以缩短微指令字长。
- 缺点:要通过译码电路后再发出微命令,因此比直接编码方式慢。
如上图,(PC)->MAR和1->R这两个微操作是可以并行的执行的,所以我们把这两个微操作放到不同的段里面,这两个微操作在段内会有与之相对应的编码,这个编码经过译码器的译码就会发出相应的控制信号,并且这两个的控制信号是并行的发出的。
(PC)->MAR和(PC)+1->PC这两个微操作是互斥的,可以放到同一个段。
- 字段间接编码方式
- 一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微命令,故称为字段间接编码,又称隐式编码。
- 优点:可进一步缩短微指令字长。
- 缺点:削弱了微指令的并行控制能力,故通常作为字段直接编码方式的一种辅助手段
如图,字段2经过译码器译码之后并不是直接发出这个字段所对应的控制信号,而是会把这个译码器的输出信号输送给下一级的译码器,经过下一级的译码器再次处理后才发出最终的控制信号。
5.4.3、例题
- 第1个互斥类有7个微命令,它们不可以并行的发出,那这7个微命令会被分到同一个分段里面,并且我们要保留1个状态表示不操作。所以这个互斥类的字段需要表示8种不同的状态,故需要3个二进制位。
5.4.4、微指令的地址形成方式
如何确定下一条微指令的存放地址呢?
-
直接根据微指令的下地址字段指出🔥
- 微指令格式中设置一个下地址字段,由微指令的下地址字段直接指出后继微指令的地址,这种方式又称为断定方式。
-
根据机器指令的操作码形成
- 当机器指令取至指令寄存器后,微指令的地址由操作码经微地址形成部件形成
-
增量计数器法🔥
- (CMAR)+1->CMAR
-
分支转移
-
转移方式:指明判别条件
-
转移地址:指明转移成功后的去向
-
- 通过测试网络(了解)
- 由硬件产生微程序入口地址
- 第一条微指令地址由专门硬件产生(用专门的硬件记录取指周期微程序首地址)
- 中断周期 由硬件产生中断周期微程序首地址(用专门的硬件记录)
5.4.5、例题
- 题中说公共的取指令微程序包含2条微指令:也就是公共的取指周期微程序序列只有两条,0和1,图中画的是三条
- 各指令对应的微程序平均由4条微指令组成:也就是每一条机器指令所对应的执行周期微指令序列都是4条
- 这个题本质问的就是控制存储器CM总共存储多少条微指令,这样就可以推出下地址总共有多少位
- 32条指令,每个指令的微指令序列有4条,同时还有公共取指周期微指令序列有2条,所以共需要存32×4+2=130条微指令,也就是下地址字段的位数至少是8位。
5.4.6、小结
5.5、微程序控制单元的设计
和硬布线控制器的节拍安排相同,但是硬布线控制器最后一步是将指令的操作码送给指令译码器ID,但是对于微程序控制器来说,最后一步是将指令操作码送给微地址形成部件。
c程序cpu占用率