2021 学年春季学期《计算机组成原理》复习指南-四五六章

第四章 指令系统

1.指令操作码编码:定长,扩展。例题 4.1 和习题 6。P115

一条指令的格式:
	| 操作码 | 地址码A1 | 地址码A2 | 地址码A3 |
	指令的长度是固定的,题设会给,一般是16字节,地址码长度一般也会给
1.固定操作码编码
	指令的操作码部分采用固定长度编码
2.扩展操作码编码
	2.1 等长扩展法
	2.2 不等长扩展法
例题 4.1

在这里插入图片描述

地址码长度操作码长度可用编码已用编码剩余编码
二地址指令12424=16151
一地址指令6101*26=643430
零地址指令01630*26

故剩下的零地址指令最多有 30*26条。

以上表格是我对这种题的总结,答题不能这样写,我们老师要求把中间过程,编码方式都写出来。

  1. 注意先从多地址开始编码
  2. 注意加粗部分,剩余编码 * 2k(k是地址码长度)

(《计算机组成与系统结构(第二版)(袁春风)》P115)
解:扩展编码的基本思想就是操作码按从短到长进行扩展编码。二地址指令的操作码最短,零地址指令的操作码最长,所以按照二地址->一地址->零地址的顺序进行。(建议背会)
二地址指令的地址码部分占12位,故操作码只有4位,最多有16种编码,用去15种编码(0000~1110)分别表示15条指令,还剩一种编码1111未使用。
一地址指令的地址码部分占6位,故操作码有10位,最高四位为1111,还剩6位未编码,最多可有26=64种编码,用其中的32+2=34种编码(11110 00000 ~ 11110 11111和11111 00000 ~ 11111 00001)分别表示34条一地址指令。
剩下的零地址指令共有16位操作码,其中最高5位只能是11111,所以编码范围为11111(00010 ~ 11111)(000000 ~ 111111),即高5位为11111,次5位为00010~11111,低6位为000000 ~ 111111。
因此,零地址指令最多有30×26

习题 6

在这里插入图片描述

地址码长度操作码长度可用编码已用编码剩余编码
二地址指令12424=16k216-k2
一地址指令610(16-k2)*26k1(16-k2)*26 -k1
零地址指令016((16-k2)*26 -k1)*26k00

设一地址指令有k1条,
由((16-k2)*26 -k1)*26 = k0
得k1 = (16-k2)*26-2-6k0

以上计算方法只能做小题,大题不能这样写,得分不全,要把中间过程,编码方式都写出来。

2.指令系统中采用不同灵活的寻址方式,使用尽量短的地址码访问尽可能大的寻址空
间。

1.立即寻址:A就是操作数本身(A是立即数)
2.直接寻址:A就是有效地址
3.间接	EA = (A)
4.寄存器	EA = Ri
5.寄存器间接	EA = (Ri)
6.变址	EA = (IX) + A
7.相对	EA = (PC) + A
8.基址	EA = (BR) + A

3.CISC 与 RISC 的主要特点(理解含义就可)。P119
CISC指令系统设计的主要特点

  1. 指令系统复杂
  2. 指令周期长
  3. 指令周期差距大
  4. 采用微程序控制
  5. 难以进行编译优化

RISC指令系统设计的主要特点

  1. 指令数目少
  2. 指令格式规整
  3. 采用Load/Store型指令设计风格
  4. 采用流水线方式执行指令
  5. 采用大量通用寄存器
  6. 采用硬连线控制器
  7. 采用优化的编译系统

*计算机执行程序所需要的时间 P= I×CPI×T 其中 I 是指令数,CPI 是执行每条指令所需的平均周期数,T 是时钟周期。

4.结合习题,学会 C 高级语言的 MIPS 机器代码表示,注意 MIPS 寄存器的使用约定

举个小栗子,注意目的寄存器的对应
C		a = b + c					a  		b   c
MIPS	add $t0,$s1,$s2				$t0		$s1 $s1
指令字段	op rs rt rd shamt func		rd		rs  rt

MIPS 寄存器的使用约定
在这里插入图片描述
在这里插入图片描述

习题参考部分:第 3、4、6、11 题。

在这里插入图片描述
解:执行该转移指令时PC内容为200,且该转移指令共占两个字节,设该转移指令第二字节的内容为offset,
则执行完该转移指令时PC内容为200+2+offset=100,
解得offset=100-200-2=-102,
用补码表示为-1100110B=10011010B.
在这里插入图片描述
解:
(1)有效地址 EA = 1200H + 12 = 1200H + 000CH = 120CH,操作数未知
(2)有效地址 EA = (1200H)= 12FCH,操作数为38B8H
(3)有效地址 EA = (R8)= 1200H,操作数为12FCH
在这里插入图片描述
解:
b=25|a 可用 ori $t1, $t0, 25 实现,

OR 在两个寄存器之间执行按位OR运算。
ORI 执行一个寄存器与立即数之间的按位OR运算

若把25换成65536,即b=65536|a,则不能用 ori $t1, $t0, 65536实现,因为65536(1 0000 0000 0000 0000B)不能用16位立即数表示,故不能用一条指令实现。
可以用以下两条指令实现:
lui $t1, 1 #将0001 0000H置于寄存器t1
or $t1, $t0, $t1 #将t0和t1的内容进行或运算,送t1

lui rt,immediate
指令作用为:rt ← immediate ll 016,将指令中的16bit立即数保存到地址为rt的通用寄存器的高16位。另外,地址为rt的通用寄存器的低16位使用0填充。

第五章 中央处理器

1.1 指令周期的概念,与时钟周期、机器周期的区别。P142

指令周期:CPU取出并执行一条指令的时间。
时钟周期是计算机中最基本、最小的时间单位;在一个时钟周期内,CPU只完成最基本的动作。
通常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期
一个指令周期中通常包含几个机器周期,每个机器周期内包含若干个时钟周期,它们形成了计算机中的时序概念系统。

1.2 数据通路的含义(包括组合逻辑元件、存储元件),要求理解不是记下来。P143

CPU由数据通路和控制部件两大部分组成。
通常将指令执行过程中数据所经过的路径,包括路径上的部件称为数据通路。
通常把数据通路中专门进行数据运算的部件称为执行部件或功能部件。

数据通路是由组合逻辑元件操作元件)和存储元件状态元件)通过总线或分散方式连接而成的进行数据存储、处理和传送的路径。

组合逻辑元件的输出只取决于当前的输入。
----数据通路中常用的组合逻辑元件有多路选择器(MUX)、加法器(Adder)、算术逻辑部件(ALU)、译码器(Decoder)等。
状态元件具有存储功能,输入状态在时钟控制下被写到电路中,并保持电路的输出值不变,直到下一个时钟到达。
----最简单的状态元件是D触发器。

1.3 程序计数器(PC)和指令寄存器(IR)等寄存器的功能与作用。

程序计数器(PC),又称指令计数器或指令指针(IP),用来存放指令的地址。
指令寄存器(IR),用以存放现行指令。

数据通路中的寄存器是一种典型的状态存储元件,由n个D触发器可构成一个n位寄存器。
根据功能和实现方式的不同,有各种不同类型的寄存器。

  1. 带"写使能"输入信号的触发器(锁存器)构成的寄存器,称为暂存器,用来实现指令寄存器IR、通用寄存器组等。
  2. 输出端带一个三态门的寄存器,通常用于与总线相连的寄存器,可通过三态门来控制信息是否打到总线上。
  3. 带复位(即清零)功能的寄存器。
  4. 带计数(自增)功能的寄存器。
  5. 带移位功能的寄存器。
2.单周期、多周期 CPU 设计。结合习题,例如单周期处理器的特点,多周期数据通路和单周期数据通路比较特点。熟悉课本上 11 条指令的单周期数据通路设计要求。

单周期处理器的特点:

  1. CPI = 1,单周期处理器每条指令在一个时钟周期内完成。
  2. 时钟周期通常取最复杂指令所用的指令周期(在所给的11条指令中,最长的是lw指令周期)
  1. 提出划分阶段的思想,将每一条指令拆分为 5 个阶段:IF(Instruction Fetch,指令获取),ID(Instruction Decode,指令解码),EX(Execution,指令执行),MEM(Memory Access,内存读写)和 WB(Write Back to Register,写回寄存器)
  2. CPI 一般为 N( N 代表阶段数目,一般情况下 N = 5 )
3.1 结合习题,学会区别硬连线路控制器设计和微程序控制器设计。

在这里插入图片描述

3.2 CS 控制存储器与一般意义上的存储器的区别(所在的位置)。

主存储器:用于存放程序和数据,在CPU外部,用RAM实现,
控制存储器(CS或CM):用于存放微程序,在CPU内部,用ROM实现。

3.3 机器指令与微指令的关系。

一条机器指令对应一个微程序,这个微程序是由若干条微指令构成的。因此,一条机器指令的功能是若干条微指令组成的序列来实现的。简而言之,一条机器指令所完成的操作划分成若干条微指令来完成,由微指令进行解释和执行。

3.4 根据具体 CPU 数据通路图,能够给出具体指令周期流程图,并给出微操作控制信号序列(结合课件 ppt 上的举例,双总线数据通路)。

在这里插入图片描述
在这里插入图片描述

3.5 微程序控制器与硬布线控制器的区别(执行速度,指令修改上)。

硬布线控制:
由于控制器的速度取决于电路延迟,所以速度较快。
一旦设计完成,不可能通过其他的修改添加新功能。
微程序控制:
同硬布线控制器相比,具有规整性、灵活性、可维护性等一系列优点。
由于微程序控制器采用了存储程序原理,所以每条指令都要从控制存储器中取一次,因此影响了速度。

4.异常与中断的区别,给个例子知道属于哪一类?

异常(内中断)可分为故障(fault)、陷阱(trap)和终止(abort)三类。
-故障(fault):“非法操作码”,“段不存在,缺页,保护错”,“除数为0”
-陷阱(trap):“断点设置”,“单步跟踪”,“系统调用”
-终止(abort):“电源掉电”,“线路故障”
中断(外中断):由于外部设备事件所引起的中断,“打印机缺纸”,“定时采样计数时间到”,“键盘缓冲满”

习题参考部分:第 4、5、15 题及布置作业的补充题。

在这里插入图片描述

解:采用同步方式读写内存,CALL指令有2个字,按字编址,每次从主存读取一个字,CALL指令需要读两次主存,一次是读取指令中的操作码,第二次是读取指令中的给出的子程序首地址,指令周期分为以下三个阶段:
(1)读指令操作码:将PC的内容作为地址访问存储器,取出指令的操作码,送IR,同时PC+1送PC,以指向指令的第二个字。 至少需要三个时钟周期。
PCout, MOVb, MARin
Read, b+1, PCin
MDRout, MOVb, IRin
(2)取子程序首地址:将PC的内容作为地址,取出指令的第二个字(即子程序入口地址)送PC,以使下一个指令周期从子程序的第一条指令开始执行。同时计算PC+1以得到返回地址,送Y寄存器(临时保存)。 至少需要三个时钟周期。
PCout, MOVb, MARin
Read, b+1, Yin
MDRout, MOVb, PCin
(3)保存返回地址至栈中:将临时保存在Y寄存器的返回地址送到栈顶保存,并自动调整栈顶指针。至少需要三个时钟周期。
SPout, MOVb, MARin
Yout, MOVb, MDRin
Write, SPout, b-1, Spin
备注:也可以将第一次PC+1的结果送到Y,第二阶段以Y访问主存,继续Y +1,送PC,也能实现Call,都是9个时钟周期。

在这里插入图片描述

解:图5.7所示的数据通路中,所有与内部总线相连的寄存器都有相应的Rin或Rout控制信号,以控制总线和寄存器之间的数据传送。总线和ALU输入端之间、Y寄存器与ALU输入端之间都无需控制信号。下面给出的是指令执行阶段的控制信号,此时指令的第二个字(Immm16)已从存储器取出并被存放在MDR中。
(1)指令功能为:R[R1] ←R[R1]+Imm16,执行阶段不需要访存操作,因此可用以下三个时钟周期完成。
MDRout, Yin
R1out, add, Zin
Zout, R1in
(2)指令功能为:R[R1] ←R[R1]+M[Imm16],执行阶段需要一次访存操作,因此至少需要以下5个时钟周期完成。
MDRout, MARin
Read1, (R1out, Yin) //R1out,Yin与Read1同时送出,并在Read2阶段保持不变,也可以与Read2同时送出。
Read2, R1out, Yin //同步等待,再保持一个时钟周期,等待存储器
MDRout, add, Zin
Zout, R1in
(3)指令功能为:R[R1] ←R[R1]+M[M[Imm16]],执行阶段需要2次访存操作,因此至少需要以下8个时钟周期完成。
MDRout, MARin
Read1
Read2
MDRout, MARin
Read1, (R1out, Yin)
Read2, R1out, Yin
MDRout, add, Zin
Zout, R1in

在这里插入图片描述
在这里插入图片描述

解:微程序控制器容量为1024*48位,说明微地址占10位,微指令字为48位。微指令字分为三个字段:微命令字段、转移控制字段和下地址子字段。因为微地址10位,所以下地址字段10位,用来给出下条微指令的地址;因为需要对5种情况进行控制,所以控制转移字段有3位,剩下的48-10-3=35位是微命令字段。
采用断定法时,转移控制字段可按下方案进行编码:
000:下地址字段指出的地址作为下条微地址。
100:根据分支1处的条件来选择下条微地址。
101:根据分支2处的条件来选择下条微地址。
110:根据分支3处的条件来选择下条微地址。
111:根据分支4处的条件来选择下条微地址。
微指令的格式如下:
在这里插入图片描述

第六章 指令流水线

1.五段流水线: IF, ID, OF, EX, WB。P194

(1)取指令(IF):从cache或主存取指令。
(2)指令译码(ID):产生指令执行所需的控制信号。
(3)取操作数(OF):读取存储器操作数或寄存器操作数。
(4)执行(EX):对操作数完成指定操作。
(5)写回(WB):将操作数写回存储器或寄存器。

N 条指令的执行总时间:(M+N-1)×T 其中 M 为流水段数,N 为每个流水段的执行时间。
2.流水线冒险:结构冒险、数据冒险和控制冒险。 尤其要熟悉数据冒险。

(1)结构冒险(硬件资源冲突):同一个部件同时被不同指令所用。
(2)数据冒险(数据相关):后面指令用到前面指令结果时,前面指令结果还没有产生。
解决方法:1.插入空操作指令 2.插入气泡 3.采用转发技术
(3)控制冒险(硬件资源冲突):指令执行顺序改变而引起的流水线阻塞。

3.重点是 Load-use 数据冒险(例题 6.1 P210),如何识别与改进,结合习题。

Load-use 数据冒险:lw指令后跟 R-型指令 或 I-型运算类指令
Load-use 冒险发生的条件是,上一条是Load指令,并且从存储器装入寄存器的数据是当前指令的源操作数。
在这里插入图片描述

对于Load-use 数据冒险,
最简单的做法是由编译器在load指令之前插入nop指令来解决,这样就无须硬件来处理数据冒险问题,
最好的方法是在程序编译时进行优化,通过调整指令顺序以避免出现 Load-use 现象。

在这里插入图片描述

解:上述目标代码中,发生数据相关的指令对是1-3、2-3、3-4、5-7、6-7、7-8。
其中,2-3和6-7两个指令对之间出现了Load-use 数据冒险,它们不能通过转发技术解决,其他指令对之间的相关性引起的数据冒险都可通过转发技术解决。
可通过调整指令顺序,将第一条无关指令插入Load指令和 R-型指令之间来优化代码,以避免 Load-use 现象。
本例中通过将第五条指令和第四条指令分别插入2-3和6-7指令对中间来优化。
编译优化得到的目标代码如下:

  1. lw $2 , [b]
  2. lw $3 , [c]
  3. lw $5 , [e]
  4. add $1 , $2 , $3
  5. lw $6 , [f]
  6. sw $1 , [a]
  7. sub $4 , $5 , $6
  8. sw $4 , [d]
习题参考部分:第 4、6、7 题。

在这里插入图片描述

(1)非流水线处理器上执行该程序的时间大约为:100ps106=100μs。
(2)若在一个20级流水线的处理器上执行,忽略流水段之间的寄存器延时,理想情况下,每个时钟周期为100/20=5ps,所以程序执行时间大约为5
106=5μs 。
因此,大约快100/5=20倍。
(3 )流水段之间数据的传递产生的额外开销,使得一条指令的执行时间被延长,即影响了指令执行时间;同时也延长了每个流水段的时间,即影响了指令吞吐率 。

在这里插入图片描述

(1)发生数据相关的是:第1和第2条指令之间关于$ s3,第2和第3条之间关于$ t2, 第2和第4条指令之间关于$ t2,第3和第4条指令之间关于$ t1。
(2)不采用“转发”处理的话,需要分别在第2、3、4条指令前加2条nop指令才能避免数据冒险,共加了6条nop指令。
(3)通过“转发”可以避免在第 1和第2、第2和第3、第2和第4条指令之间的数据相关;但是第3和第4条指令之间是load-use数据相关,因此无法用“转发”消除冒险,而需要在第4条指令前加入1条nop指令。

在这里插入图片描述

(1)发生数据相关的是:第1和第2条指令之间关于$ s3,第2和第3条指令之间关于$ t2,第2和第4条指令之间关于$ t2,第3和第4条指令之间关于$ t1。通过“转发”可以避免1和2、2 和3、2和4间的数据相关。
(2)第3和第4条指令之间是load-use数据冒险,所以无法用“转发”消除冒险。
(3)第5周期结束时,各条指令执行状态如下:
指令1在“WB”阶段,控制信息等在MEM/WB.Reg中,$ s3正在被写,结束时写完。
指令2在“MEM”阶段,subu指令在该阶段进行的是空操作;在转发检测单元中,因为流水段寄存器Ex/Mem中的目的寄存器RegRd为$ t2,流水段寄存器ID/Ex中的源寄存器也为$ t2,同时流水段寄存器Ex/Mem中的RegWr信号为1,所以转发条件满足,因而此时subu指令在上一个时钟周期中的执行结果正被回送到ALU的输入端;结束时转发完成。
指令3在“EXE”阶段,ALU正在执行“add”操作,进行地址运算,ALU输出结果将被写入流水段寄存器Ex/Mem中;结束时运算完成,控制信息等在ID/EX.Reg中,正在检测是否load-use冒险。
指令4在“ID/REG”阶段,指令在IF/ID.Reg中,$ t1和$ t2正在被读出。在load-use冒险检测单元中,因为流水段寄存器IF/ID中源操作数寄存器Rs为$ t1,流水段寄存器ID/Ex中的目的操作数寄存器Rt也为$ t1,同时,因为上条指令是lw,故流水段寄存器ID/Ex中的MemRead控制信号为1,所以在该阶段检测到load-use冒险条件满足,此时,需要进行load-use冒险处理,在流水线中插入一个“气泡”,将指令的执行阻塞一个时钟周期,包括以下三个步骤:一是将流水段寄存器ID/Ex中的控制信号全部清0,以保证第4条指令被堵塞一个时钟周期执行;二是将流水段寄存器IF/ID中的指令维持不变,以保证第4条指令重新译码后执行;三是将PC的值维持不变,以保证根据PC的值重新取出第5条指令。结束时完成上述工作。
指令5在“IF”阶段,指令正被读出。结束时已送到流水段寄存器IF/ID的输入端。因为之前发生了load-use数据冒险,所以该指令将在随后的第6个时钟周期内重新被读出。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tfnmdmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值