计算机组成与系统结构课后答案全清华大学出版社袁春风主编 联系客服

发布时间 : 星期日 文章计算机组成与系统结构课后答案全清华大学出版社袁春风主编更新完毕开始阅读f611bd988562caaedd3383c4bb4cf7ec4afeb6e9

add $rs, $rs, $rt

(2)假定该指令占x%,其他指令占(1-x)%

则用硬件实现该指令时, 程序执行时间为原来的1.1*(x+1-x) =1.1 倍 用软件实现该指令时,程序执行时间为原来的3x+1-x =(2x+1)倍 当1.1 < 2x+1 时,硬件实现才有意义 由此可知,x > 5%

9. 假定图6.33多周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号PCWr、IRWr、RegWr、BrWr、PCSource、MemWr、MemtoReg、PCWrCond、R-type总是为0,则哪些指令不能正确执行?为什么? 参考答案:

若PCWr=0,则所有指令都不正确,因为无法更新PC

若IRWr=0,则所有指令都不能正确执行,因为IR中不能写入指令

若RegWr=0,则所有需要写结果到寄存器的指令(如:R-Type指令、load指令等)都 不能正确执行,因为寄存器不发生写操作

若BrWr=0,则Branch指令不能正确执行,因为投机计算的分支地址无法送入寄存器 若PCSource=00,则除j之外的其他指令都不能正确得到下条指令地址 若MemWr=0,则Store指令不能正确执行,因为存储器不能写入数据 若MemtoReg=0,则所有Load指令执行错误,因为寄存器写入的是ALU输出 若PCWrCond=0,则Branch指令不能正确执行,因为不能写入转移目标地址到PC 若R-type=0,则所有R-type指令的执行可能出错

10. 假定P.185图6.32多周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号PCWr、IRWr、RegWr、BrWr、PCSource、MemWr、MemtoReg、PCWrCond、R-type总是为1,则哪些指令不能正确执行?为什么? 参考答案:

若PCWr=1,则程序执行顺序失控,因为每个时钟都会更新PC

若IRWr=1,则所有指令都可能不能正确执行,因为写入IR的可能不是当前指令 若RegWr=1,则所有不需写结果到寄存器的指令(如:sw、beq等)都不能正确执行

若BrWr=1,则Branch指令不能正确执行,因为运算阶段的ALU输出也会放入寄存器,成为错误的分支转移目标地址。

若PCSource=01,则j和Branch指令不能正确得到下条指令地址 若MemWr=1,则除Store指令外的所有指令都不能正确执行 若MemtoReg=1,则除Load外的所有指令执行错误

若PCWrCond=1,则除Branch外的其他指令可能不能正确执行 若R-type=1,则所有非R-type指令的执行可能出错

12. 假定某计算机字长16位,标志寄存器Flag中的ZF、NF和VF分别是零、负和溢出标志,采用双字节定长指令字。假定Bgt (大于零转移) 指令的第一个字节指明操作码和寻址方式,第二个字节为偏移地址Imm8,其功能是:

若(ZF+(NF⊕VF)=0) 则 PC=PC+2+Imm8 否则 PC=PC+2 (1) 该计算机的编址单位是什么? (2) 画出实现Bgt指令的数据通路。 参考答案:

(1)该计算机的编址单位是字节。

因为PC的增量是2,且每条指令占2个字节,所以编址单位是字节。

(2)实现Bgt指令的数据通路如下

根据“大于”条件判断表达式,可以看出该bgt指令实现的是带符号整数比较。因为无符号数比较时,其判断表达式中没有溢出标志OF。偏移地址Imm8为补码表示,转移目标地址可能在bgt指令之前,也可能在bgt指令之后。计算转移目标地址时,偏移量为Imm8, 范围为-128~127,故转移目标地址的范围是PC+2+(-128)~PC+2+127

如果偏移量为Imm8x2, 转移目标地址的范围是PC+2+(-128×2)~PC+2+127×2,其实意味着相对于bgt指令的前127条指令到后128条指令之间。

IR

OP MOD Imm8 PC +2 ZF NF VF 1 0 Bgt

13. 对于多周期MIPS处理器,假定将访问数据的过程分成两个时钟周期可使时钟频率从4.8GHz提高到

5.6GHz,但会使得lw和sw指令增加时钟周期数。已知基准程序CPUint 2000中各类指令的频率为:Load: 25%,Store: 10%,Branch: 11%,Jump: 2%,ALU: 52%。以基准程序CPUint 2000为标准计算时钟频率提高后处理器的性能提高了多少?若将取指令过程再分成两个时钟周期,则可进一步使时钟频率提高到6.4GHz,此时,时钟频率的提高是否也能带来处理器性能的提高?为什么? 参考答案:

三种频率的机器上,各类指令的百分比和 CPI M1 4.8GHz M2 5.6GHz M3 6.4GHz Load 25% 5 6 7 Store 10% 4 5 6 Branch 11% 3 3 4 Jump 2% 3 3 4 ALU 52% 4 4 5 三种机器的平均CPI和MIPS

CPIofM1=25%x5+10%x4+11%x3+2%x3+52%x4=4.12 CPIofM2=25%x6+10%x5+11%x3+2%x3+52%x4=4.47 CPIofM3=25%x7+10%x6+11%x4+2%x4+52%x5=5.47 MIPSofM1=4.8G / 4.12 =1165 MIPSofM2=5.6G / 4.47 = 1253 MIPSofM3=6.4 G / 5.47 = 1170

由此可见,数据存取改为双周期的做法效果较好。进一步把取指令改为双周期的做法反而使MIPS数变小了,所以不可取。因为数据存取只涉及到load/Store指令,而指令存取涉及到所有指令,使得CPI显着提高。

15. 微程序控制器容量为1024×48位,微程序可在整个控存内实现转移,反映所有指令执行状态转换的有

限状态机中有4个分支点,微指令采用水平格式,微地址由专门的下地址字段确定。请设计微指令的格式,说明各字段有多少位?为什么? 参考答案:

微程序控制器容量为1024×48位,说明微地址占10位,微指令字共48位,其中10位下地址字段用来给

出下条微地址;转移控制字段需要对5种情况进行控制,需3位。例如, 000:取指令微指令首地址

100:根据分支1处的条件选择下条微地址 101:根据分支2处的条件选择下条微地址

110:根据分支3处的条件选择下条微地址 111:根据分支4处的条件选择下条微地址 剩下的48-10-3=35位用来表示微操作码字段。

(如果采用计数器法,则转移控制字段需要对6种情况进行控制,比上述5种情况多一种:即顺序执行下条微指令,此时,也要3位。)

也可以用5位作为转移控制字段, 33位作为微操作码字段 00001,00010,00100,01000,10000

------------------其它

16. 对于多周期CPU的异常和中断处理,回答以下问题:

(1)对于除数为0、溢出、无效指令操作码、无效指令地址、无效数据地址、缺页、访问越权和外部

中断, CPU在哪些指令的哪个时钟周期能分别检测到这些异常或中断?

(2)在检测到某个异常或中断后,CPU通常要完成哪些工作?简要说明CPU如何完成这些工作? (3)TLB缺失和cache缺失各在哪个指令的哪个时钟周期被检测到?如果检测到发生了TLB缺失和cache

缺失,那么,CPU各要完成哪些工作?简要说明CPU如何完成这些工作?(提示:TLB缺失可以有软件和硬件两种处理方式。) 部分参考答案:

a. “除数为0”异常在取数/译码(ID/Reg)周期进行检测 b. “溢出”异常在R-Type指令的执行(Exe)周期进行检测 c. “无效指令”异常在取数/译码(ID/Reg)周期进行检测

d. “无效指令地址”、“缺页”和“访问越权”异常在取指令(IF)周期检测

e. “无效数据地址”、“缺页”和“访问越权”异常在存储器访问(Mem)周期检测

f. “中断”可在每条指令的最后一个周期(WB)的最后进行检测

11. 假定有一条MIPS伪指令“Bcmp $t1, $t2, $t3”,其功能是实现对两个主存块数据的比较,$t1和$t2中分

别存放两个主存块的首地址,$t3中存放数据块的长度,每个数据占四个字节,若所有数据都相等,则将0置入$t1;否则,将第一次出现不相等时的地址分别置入$t1和$t2并结束比较。若$t4和$t5是两个空闲寄存器,请给出实现该伪指令的指令序列,并说明在类似于P.185图6.32的多周期数据通路中执行该伪指令时要用多少时钟周期。 参考答案:

(1)实现伪指令“bcmp $t1, $t2, $t3”的指令序列如下。

beq $t3, $zero, done lw $t4, 0($t1) lw $t5, 0($t2)

# 若数据块长度为0,则结束 # 块1的当前数据取到$t4 # 块2的当前数据取到$t5 # $t4和$t5的内容不等,则结束 # 块1中的当前数据指向下一个 # 块2中的当前数据指向下一个 # 比较次数减1

compare:

bne $t4, $t5, done addi $t1, $t1, 4 addi $t2, $t2, 4 addi $t3, $t3, -1

bne $t3, $zero, compare # 若没有全部比较完,则继续比较 addi $t1, $zero, 0 # 若全部都相等,则将$t1置0

done:

(2)在多周期数据通路执行时,上述程序段中用到的指令beq、lw、bne和addi的时钟周期数分别为3、5、3和4。若比较的数据块大小为50个字,则上述指令序列中的循环(粗体部分)最多被执行50次,因而所需的指令数最多为1+50×7+1=352。其中,load指令为50×2=100条,时钟周期数为5×100=500;branch指令数为1+2×50=101,时钟周期数为3×101=303;addi指令数为1+3×50=151,时钟周期数为4×151=604。所以,总时钟周期数最多为500+303+604=1407。

习题

1. 给出以下概念的解释说明。

指令流水线(Instruction pipelining)

指令吞吐量(Instruction throughput)

流水线深度(Pipeline Depth) 流水线冒险(Hazard)