【计算机组成原理】中央处理器CPU
一、CPU的功能和基本结构
1、功能
当用计算机解决某个问题是,我们首先必须为他编写程序,程序是一个指令序列,这个序列明确告诉计算机应该执行什么操作,在什么地方找到用来操作的数据,一旦把程序装入内存器,就可以由计算机来自动完成取出指令和执行指令的任务。专门用来完成此项工作的计算机部件称为中央处理器,通常简称CPU。
虚线框就是CPU结构
CPU通过地址总线 数据总线来访问存储器或者输入输出端口。
ALU:执行运算 两个数一个来自缓存寄存器DR 一个来自累加器AC 运算结果暂时存放到累加器中
状态条件寄存器:0标志位 溢出标志位 等
缓冲寄存器DR:信息进出CPU都有在这蹲点,不论是指令还是数据进CPU都要先进缓存寄存器DR。
指令寄存器:当前正在执行的指令,这里的指令中包含操作码和地址码,将操作码送入指令译码器就知道指令是做什么的,指令译码器把翻译结果告诉操作控制器和时序产生器,他们再按照时间顺序向计算机的执行部件发出执行命令。
程序计数器:下一条将要执行指令的地址
地址寄存器:存放CPU正在访问的内存的地址,一般和地址总线直接相连
CPU的基本部分由运算器 cache和控制器三大部分组成。
二、指令的执行过程
1.指令周期的基本概念
问题:计算机读取的指令和数据都是存在存储器里面的二进制代码,计算机如歌区分这二进制代码是指令还是数据?
计算机能自动的工作,从存放程序的内存里取出一条指令并执行这条指令,紧接着又是取指令,执行指令,如此周而复始,构成了封闭的循环,除非遇到停机指令,否则这个循环将一直继续下去、
指令周期:CPU从内存取出一条指令并执行这条指令的时间总和,不同指令的指令周期不同。
CPU周期:又称机器周期,用从内存读取一条指令字的最短时间来定义
时钟周期:通常称为节拍脉冲或T周期,一个CPU周期包含若干个时钟周期
eg:分析代码的执行过程
CLA ;清零指令,将累加寄存器AC的所有位清零
ADD 30 :加法指令,将底座为30的内存空间的内容与累加器AC的内容相加
STA 40:将和写入地址为40的内存空间
NOP :空操作
JMP 21:跳转指令,目标地址为21
021到024 存放指令,说明这是单地址指令,取需要一个CPU周期
第一条指令:不需要访问内存,取指令占用1个CPU周期。执行之前先将PC的内容变为20,周期开始,取指令,指令地址是20,根据地址20去访问内存,地址寄存器存放的是CPU当前要访问的内存地址,地址寄存器和地址总线是直接相连的,所以第一步是把PC中的饿0送到地址寄存器,接着送往地址总线(此时取值完成,自动加1,PC中的内容变为21.下一条指令做好准备),地址总线传给内存,从内存中地址为20的地方读出的指令经过数据总线进CPU,现在缓存寄存器DR中蹲点,因为现在只取指令阶段,所以可以判断读取的是指令,因为是指令所以讲其送往指令寄存器 IR中,IR中存放的就是当前要执行的指令信息,将指令中的操作码信息送往指令译码器 ,通过译码将结果告诉操作控制器和时序产生器,这个时候操作控制器和时序产生器想ALU和累加器 发出执行命令。ALU就将累加器中的内容变为了0.
第二条指令:取指令占用1个CPU周期,执行周期要占用2个CPU周期。当前PC内容是21,先把PC的21送到地址寄存器,送到地址总线,PC的内容+1,从内存中地址为21的地方读出加法指令,经过数据总线现在缓存寄存器中蹲点,取指令阶段,指令送往指令寄存器,然后把操作数送往指令译码器,译码结果发给操作控制器和时序产生器,加法指令一个操作数在累加器中,另一个在地址为30的单元中,因为要访问地址是30的数据,所以必须通过指令寄存器把30通过内部总线送到地址寄存器,因为地址寄存器之间和地址总线相连,所以导内存中地址为30的单元取值,将地址30中的额数据6通过数据总线先进缓存寄存器蹲点,因为是执行阶段,所以将数据送给ALU,把累加器的数作为另外一个数送到ALU,相加之和再将数据写回累加器。
第三条指令:写数要访问内存,目前PC的内容是22,我们要访问地址为22的单元,读取指令。先将PC中的22送到地址寄存器,然后PC中的值+1变为23,经过地址总线取到地址为22的单元的指令内容,经过数据总线送到缓冲寄存器,因为是取指阶段,所以将指令送往指令寄存器,指令寄存器将操作码送往指令译码器,指令译码器将结果送往操作控制器和时序产生器,要写入的地址是40.通过内部总线将40传给地址寄存器,经过总线选中地址为40的单元,将累加器中的值6先进缓冲寄存器,通过内部数据总线写入内存。
第四条指令:PC的内存是23 代表一个空操作,将PC中的23送给地址寄存器,经过地址总线找到内存中地址为23的单元,将空操作指令经过数据总线送到缓冲寄存器,送往指令译码器,然后什么也不做。共占用一个CPU周期。
第五条指令:PC的内存是24 . 将24送给地址寄存器,经过地址总线导内存中找到地址为24的单元,通过总线将指令送给缓冲寄存器,因为是取指阶段,所以将指令送给指令寄存器。然后译码,
跳转指令的实质是将跳转地址重新写回PC。
例:下图所示为双总线结构机器的数据通路,IR为指令寄存器,PC为程序计数器(具有自增功能),M为主存(受R/W信号控制),AR为地址寄存器,DR为数据缓冲寄存器,ALU由加、减控制信号觉得完成何种操作,控制信号G控制的是一个门电路,另外,线上标注有小圆圈表示有控制信号,例中yi表示y寄存器的输入控制信号,R1o为寄存器R1的输出控制信号,未标字符的线为直通线,不受控制
1)ADD R2,R0指令完成(R0)+(R2)->R0的功能操作,画出其指令周期流程题,假设该指令地址已放入PC中,并列出相应的微操作控制信号序列。
答:指令周期包含取指令和执行指令
取指令:指令地址在PC中,(需要PC中的指令地址送到地址寄存器中)PCo G ARi
到达AR相当于到了地址总线,经过地址总线传给存储器
加读控制信号,CPU把内存中的内容读先进去到缓存寄存器(DR)
是指令将指令送往指令寄存器:DRo B总线 G A总线 IRi 写入指令寄存器
译码
R0的内容送到x R0o B总线 G Xi
R2的内容送到Y R2o B总线 G Yi
只连送到ALU 控制信号+
结果存入R0 R0到B总线通过经过G送到R0
2)SUB R2 R3
例三、某计算机字长16位,采用16位定长指令字结果,部分数据通路结构如图所示,图中所有控制信号为1时表示有效,为0时表示无效,例如控制信号MDRInE为1表示允许数据从DB打入MDR,MDRin为1表示允许数据从内总线打入MDR,假设MAR的输出一直处于使能状态
加法指令ADD (R1) ,R0的功能为(R0)+((R1))->(R1)即将R0中的数据与R1的内容所指主存单元的数据相加,并将结果送入导R1的内容所指主存单元中保存。
下表给出了上述指令取值和译码阶段每个街拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号
时钟 | 功能 | 有效控制信号 |
C1 | MAR<-(PC) | PCout MARin |
C2 | MDR<-M(MAR) PC<-(PC)+1 | MemR MDRinE PC+1 |
C3 | IR<-(MDR) | MDRout IRin |
C4 | 指令译码 | 无 |
解:分析
1.数据通路组成(运算器 存储器 总线 指令系统 cpu)
2、指令周期 CPU周期 时钟周期
3、机器指令ADD(R1) ,R0的含义:(R0)+((R1)) (R1)
4、指令周期流程图设计
5、指令执行阶段控制信号列表
二、时序信号的作用和体制
时序信号:CPU中一个类似作息时间的东西,使计算机可以准确、迅速、有条不紊的工作。
机器一旦被启动,即CPU开始取指令并执行指令时,操作控制器就利用定时脉冲的顺序和不同的脉冲间隔,有条理。有节奏的指挥机器的动作,规定在这个脉冲导来时做什么,在那个脉冲到来时做什么,给计算机各部分提供工作所需的时间标志。
三、控制器的功能和工作原理
微程序控制器:把操作控制信号编写成微指令,放到只读存储器中(控制存储器),当机器运行时
一条一条取出这些微指令,从而产生全机锁徐的各种操作控制信号,使相应的部件执行所规定的操作。
1.微命令和微操作
数字计算机:控制部件(控制器) 执行部件(运算器 存储器 外设)
微命令:控制部件通过控制线向执行部件发出的各种控制命令
微操作:执行部件接受微命令后所进行的操作
控制部件与执行部件通过控制线和反馈信息进行联系。
控制部件 -》控制线导执行部件
执行部件-》反馈线导控制部件
执行部件通过反馈线向控制部件反应操作情况,以便控制部件通过根据执行部件的状态来下达新的微命令,这叫状态测试
相容性微操作:同事或在同一个CPU周期内可以并行执行的微操作
互斥性微操作:不能同事或不在同一个CPU周围内可以并行执行的微操作
2、微指令和微程序
微指令:在机器的一个CPU周期中,一组实现一点操作功能的微命令的组合
微程序:实现一条机器指令功能的许多条微指令组成的序列
一条机器指令=1个微程序
程序-》指令=微程序{微指令 {微命令 }->微操作}
微指令的基本格式:
3、机器指令和微指令的关系
一会取机器指令,一会儿取微指令,他们之间什么关系?
答:一条机器指令对应一个微程序,这个微程序是由若干条微指令序列组成的,因此一条机器指令的功能是由若干条微指令组成的序列来实现的,简言之。一条机器指令锁完成的操作划分成若干条微指令来完成,由微指令进行解释和执行。
4、微命令编码
1)直接表示法
特点是操作控制字段中的每一位代表一个微命令。这种方法的优点是简单直观,其输出直接用于控制。缺点是微指令字较长,因而使控制存储器容量较大。
2)编码表示法
编码表示法是把一组相斥的微命令信号组成一个小组(即一个字段),然后通过小组姨妈期读每一个微命令信号进行译码,译码输出作为操作控制信号,其微指令结构如下图
与自己控制法相比,字译码控制法克使微指令字大大缩短,但由于增加译码电路,使微程序的执行速度稍稍减慢。
目前在微程序控制器设计中,字段直接译码法使用较普遍。
采用字段译码的编码方法,可以用较小的二进制信息位表示较多的微命令信号。
n位二进制编码能表示2的n次方-1条微指令。 剩下的一个表示什么都不发
3)混合表示法
这种方法是把直接表示法和字段编码法混合使用,以便能综合考虑指令字长、灵活性、执行微程序素的等方面的要求
另外,在微指令中还可附设一个常数字段,改常数可用作操作数送入ALU运算,也可作为计数器初值来控制微程序循环次数。
5、微地址的形成方法
微指令执行的顺序控制问题,实际上是如何确定下一条微指令的地址问题,通常,产生后继微地址有两种方法
1)计数器方法
这种方法同用程序计数器来产生极其指令地址的方法类似
在顺序执行微指令时,后继微地址现行微地址加上一个增量来产生。
2)多路转移方式
一条微指令具有多个转移分支的能力称为多路转移
在多路转移方式中,当微程序不产生分支时,后继微地址直接由微指令的顺序控制字段给出
6、微指令格式
微指令的编译方法是决定微指令格式的主要因素,微指令的格式大体分为两类:水平型微指令和垂直型微指令
1)水平型微指令
一次能定义并执行多个并行操作微命令的微指令称为水平型微指令。其一般格式如下:
控制字段 | 判别测试字段 | 下地址 |
按照控制字段的编码方法不同,水平型微指令分为3种:全水平型(不译法)微指令,字段译码法水平型微指令以及直接和译码相混合的水平型微指令。
2)垂直型微指令
微指令中设置微操作码字段,采用微操作码编译法,由未操作吗规定微指令的功能,称为垂直型微指令。
结构类似于机器指令的结构,他有操作码,在一条微指令中有1-2个微操作命令,每条微指令的功能简单,因此,实现一条机器指令的微程序要比水平型微指令编写的微程序长的多
它是采用较长的微程序结果去换取较短的微指令结构。
eg:4条垂直微指令的微指令格式,设微指令字长为16位,微操作码3位。
寄存器-寄存器传送型微指令
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
源寄存器编址 | 目标寄存器编址 | 其他 |
功能是将源寄存器数据送目标寄存器,13-15是源操作码,源寄存器和目标寄存器编址各5位,可指定31个寄存器。
例一、
答:1)控制存储器的容量要包含所有微指令,其位长是微指令的长度
转移条件是4个,每个条件是1位,所以判别测试字段是4位
能够全部转移,所以下地址字段应该可以找到控存中的512个存储单元都能找到 所以下地址字段是9位
整个微指令是48位,所以微命令字段是35位
2)
例二、
例三、某计算机的控制器采用微程序控制方式,微命令中的操作控制字段采用字段直接编码法,共有32个微命令,构成5个互斥类,分别包含7 3 12 5 6个微命令,则操作控制字段至少有(C)
3+2+4+3+3
A 5 B6 C 15 D 33
例四、某计算机采用微程序控制器,共有32条指令,公共的取指令微程序包含2条微指令,各指令对应的微程序平均由4条微程序组成,采用断定法(下置字段法)确定下条微指令的地址,则微指令中下址字段的位数至少是(C)
A 5 B 6 C 8 D 9
答:4*32=128条微指令 再加公共的2个是130,要保证下地址字段能找到所有的单元要8位 2的8次方
tips:
一条微指令存放在控制器的一个控存单元中
微程序控制器属于CPU的一部分
取指令是控制器固有的功能,不需要在操作码控制下进行
在微程序控制器中,形成微程序入口地址的是:机器指令的操作码字段
在组合逻辑控制器中,微操作控制信号的形成主要与指令译码信号和时钟信号有关
若采永微程序控制方式,uPC不可以取代PC(因为uPC只是只在微程序中指向下一条微指令地址的寄存器,所以他并不可能知道这段微程序执行完毕之后下一条指令是什么)
大题:2017年
答:RISC采用的是固定的指令格式,
1)因为M的指令长短不一,不符合RISC的指令特点,所以采用的是CISC。
2)f1的机器代码占96B,因为f1的第一条指令“push ebp”所在的虚拟地址为00401020H,最后一条指令ret所在的虚拟地址为0040107FH,所以f1的机器指令代码长度为0040107F-00401020+1=60H=96个字节
3)CF=1,cmp指令实现i与n-1的比较功能,进行的是减法运算,在执行f1(0)的时候n=0,当i=0时,i=00000000H,并且n-1=FFFFFFFFH,因此,当之前第20条指令的时候,在补码加/减运算器中执行0减FFFFFFFFH的操作,即00000000H+00000000H+1=00000001H,此时进位输出C=0;减法运算的借位标记CF=C异或1=1
4)f2中不能使用sh1指令实现power*2,因为sh1指令用来将一个整数的所有有效位作为一个整体左移,而f2中的变量power是float型的,其机器数中不包含最高有效位数,但包含了阶码部分,将其作为一个整体左移时并不能实现乘2的功能,因而f2中不能用sha指令实现power*2,浮点数运算比整型运算要复制,耗时也较多