计算机组织与系统结构第六章习题答案.docx

上传人:b****4 文档编号:24265364 上传时间:2023-05-25 格式:DOCX 页数:17 大小:103.72KB
下载 相关 举报
计算机组织与系统结构第六章习题答案.docx_第1页
第1页 / 共17页
计算机组织与系统结构第六章习题答案.docx_第2页
第2页 / 共17页
计算机组织与系统结构第六章习题答案.docx_第3页
第3页 / 共17页
计算机组织与系统结构第六章习题答案.docx_第4页
第4页 / 共17页
计算机组织与系统结构第六章习题答案.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

计算机组织与系统结构第六章习题答案.docx

《计算机组织与系统结构第六章习题答案.docx》由会员分享,可在线阅读,更多相关《计算机组织与系统结构第六章习题答案.docx(17页珍藏版)》请在冰豆网上搜索。

计算机组织与系统结构第六章习题答案.docx

计算机组织与系统结构第六章习题答案

习题

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

指令周期(InstructionCycle)机器周期(MachineCycle)

同步系统(Synchronoussystem)时序信号(Timingsignal)

控制单元(ControlUnit,CU)执行部件(ExecuteUnit,EU)

组合逻辑元件(Combinationallogicelement)或操作元件(Operateelement)

时序逻辑元件(Sequentiallogiccircuit)或状态元件(Stateelement)

多路选择器(Multiplexor)扩展器(Extensionunit)

“零”扩展(0-extend)“符号”扩展(Signextend)

算术逻辑部件ALU(ArithmeticLogicUnit)加法器(Adder)

CPU总线(CPUBus)寄存器堆(Registerfile)

定时方式(Clockingmethodology)边沿触发(Edge-triggered)

寄存器写信号(RegisterWrite)指令存储器(InstructionMemory)

数据存储器(DataMemory)程序计数器(ProgramCounter)

指令寄存器(InstructionRegister)指令译码器(InstructionDecoder)

时钟周期(ClockCycle)主频(CPUClockRate/Frequency

转移目标地址(Branchtargetaddress)控制信号(Controlsignal)

微程序控制器(Microprogrammedcontrol)硬布线控制器(Hardwaredcontrol)

控制存储器(ControlStorage,控存CS)微代码(Microcode)

微指令(Microinstruction)微程序(Microprogram)

固件(Firmware)中断过程(InterruptProcessing)

异常(Exception)故障(fault)

自陷(Trap)终止(Abort)

中断(Interrupt)中断服务程序(InterruptHandler)

中断允许位(InterruptEnableBit)关中断(InterruptOFF)

开中断(InterruptON)中断响应(InterruptResponse)

向量中断(VectorInterrupt)中断向量(Interruptvector)

中断向量表(Interruptvectortable)向量地址(vectorAddress)

中断类型号(Interruptnumber)

2.简单回答下列问题。

(1)CPU的基本组成和基本功能各是什么?

(2)取指令部件的功能是什么?

(3)控制器的功能是什么?

(4)为什么对存储器按异步方式进行读写时需要WMFC信号?

按同步方式访问存储器时,CPU如何实现存储器读写?

(5)单周期处理器的CPI是多少?

时钟周期如何确定?

为什么单周期处理器的性能差?

元件在一个指令周期内能否被重复使用?

为什么?

(6)多周期处理器的设计思想是什么?

每条指令的CPI是否相同?

为什么在一个指令周期内某个元件可被重复使用?

(7)单周期处理器和多周期处理器的控制逻辑设计的差别是什么?

(8)硬布线控制器和微程序控制器的特点各是什么?

(9)为什么CISC大多用微程序控制器实现,RISC大多用硬布线控制器实现?

(10)水平型微指令和垂直型微指令的基本概念和优缺点是什么?

(11)CPU检测内部异常和外部中断的方法有什么不同?

 

3.在书中图6.9中,假定总线传输延迟和ALU运算时间分别是20ps和200ps,寄存器建立时间为10ps,寄存器保持时间为5ps,寄存器的锁存延迟(Clk-to-Qtime)为4ps,控制信号的生成延迟(Clk-to-signaltime)为7ps,三态门接通时间为3ps,则从当前时钟到达开始算起,完成以下操作的最短时间是多少?

各需要几个时钟周期?

(1)将数据从一个寄存器传送到另一个寄存器

(2)将程序计数器PC加1

 

 

所示。

(a)当前周期内不执行ALU运算

(b)当前周期内执行ALU运算

图6.10单总线数据通路中主要路径的定时

 

参考答案:

(1)寄存器的锁存延迟与控制信号的生成延迟的时间重叠,

且Clk-to-signaltime>Clk-to-Qtime,所以完成寄存器传送的时间延迟为:

7+3+20+10=40ps。

因为在这个过程中,只要最后保存一次信息到寄存器,所以只需要一个时钟周期。

(2)分两个阶段:

PC+1→Z:

7+3+20+200+10=240ps;

Z→PC:

7+3+20+10==40ps

寄存器保持时间用来作为时间约束。

因为在这个过程中,需要经过两次总线传输,每次都将传输信息保存在某个寄存器中,所以需要两个时钟周期。

 

4.右图6.30给出了某CPU内部结构的一部分,MAR和MDR直接连到存储器总线(图中省略)。

在两个总线之间的所有数据传送都需经过算术逻辑部件ALU。

ALU可实现的部分功能及其控制信号如下:

MOVa:

F=A;MOVb:

F=B;

a+1:

F=A+1;b+1:

F=B+1

a-1:

F=A-1;b-1:

F=B-1

其中A和B是ALU的输入,F是ALU的输出。

假定JSR(转子

指令)指令占两个字,第一个字是操作码,第二个字给出

子程序的起始地址,返回地址保存在主存的栈中,用SP(栈

指示器)指向栈顶,按字编址,每次从主存读取一个字。

写出读取并执行JSR指令所要求的控制信号序列(提示:

当前

指令地址在PC中)。

参考答案:

假定采用同步方式(若为异步,则只需在read和Write后加一个等待信号WMFC)

分三个阶段:

1.取指令操作码:

PCout,MOVb,MARin

Read,b+1,PCin

MDRout,MOVb,IRin

2.取子程序首址:

PCout,MOVb,MARin

Read,b+1,Yin(返回地址在Y中)

MDRout,MOVb,PCin(子程序首址在PC中)

3.保存返址至栈:

SPout,MOVb,MARin

Yout,MOVb,MDRin

Write,SPout,b-1,SPin

(注:

若按最长的存储访问时间作为CPU时钟周期,则上述每个阶段都需三个时钟周期)

能否用更少的时钟周期完成上述功能?

不能!

以下是另一种方式)

1.取指令操作码:

PCout,MOVb,MARin

Read,b+1,Yin

MDRout,MOVb,IRin

2.取子程序首址:

Yout,MOVb,MARin

Read,a+1,Yin(用b+1也行)

MDRout,MOVb,PCin

3.保存返址至栈:

SPout,MOVb,MARin

Yout,MOVb,MDRin

Write,SPout,b-1,Spin

 

5.假定某计算机字长16位,CPU内部结构如书中图6.9所示,CPU和存储器之间采用同步方式通信,按字编址。

采用定长指令字格式,指令由两个字组成,第一个字指明操作码和寻址方式,第二个字包含立即数Imm16。

若一次存储访问所花时间为2个CPU时钟周期,每次存储访问存取一个字,取指令阶段第二次访存将Imm16取到MDR中,请写出下列指令在指令执行阶段的控制信号序列,并说明需要几个时钟周期。

(1)将立即数Imm16加到寄存器R1中,此时,Imm16为立即操作数。

即:

R[R1]←R[R1]+Imm16

(2)将地址为Imm16的存储单元的内容加到寄存器R1中,此时,Imm16为直接地址。

即:

R[R1]←R[R1]+M[Imm16]

(3)将存储单元Imm16的内容作为地址所指的存储单元的内容加到寄存器R1中。

此时,Imm16为间接地址。

即:

R[R1]←R[R1]+M[M[Imm16]]

参考答案:

(1)

MDRout,Yin

R1out,add,Zin

Zout,R1in

需3个时钟周期

(2)MDRout,MARin

Read1,(R1out,Yin也可以放在该控制信号所在的时钟周期中)

Read2,R1out,Yin

MDRout,add,Zin

Zout,R1in

需5个时钟周期

(3)MDRout,MARin

Read1

Read2

MDRout,MARin

Read1,(R1out,Yin)

Read2,R1out,Yin

MDRout,add,Zin

Zout,R1in

需8个时钟周期

 

6.假定图6.24单周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号RegWr、RegDst、Branch、MemWr、ExtOp、R-type总是为0,则哪些指令不能正确执行?

为什么?

参考答案:

总是0

总是1

RegWr

则所有需写结果到寄存器的指令(如:

R-Type指令、load指令等)都不能正确执行,因为寄存器不发生写操作

不需写结果到寄存器的指令可能会出错(如store,分支,转移指令等)

RegDst

则所有R-Type指令都不能正确执行,因为目的寄存器指定错误

所有非R-Type指令都不能正确执行

Branch

Branch指令可能出错,因为永远不会发生转移

非Branch指令都出错,因为下条指令的地址计算错误

MemWr

Store指令不能正确执行,因为存储器不能写入所需数据

非Store指令都会出错,因为存储器内会写入错误数据

ExtOp

需要符号扩展的指令(如Beq、lw/sw,addiu等)发生错误

必须0扩展的指令会出错(比如ori)

 

7.假定图6.24单周期数据通路对应的控制逻辑发生错误,使得在任何情况下控制信号RegWr、RegDst、Branch、MemWr、ExtOp、R-type总是为1,则哪些指令不能正确执行?

为什么?

参考答案:

见第6题的表格.

8.在MIPS指令集中需要增加一条swap指令,可以使用软件方式用若干条已有指令来实现伪指令,也可以通过改动硬件来实现。

(1)写出用伪指令方式实现“swap$rs,$rt”时的指令序列

(2)假定用硬件实现时会使一条指令的执行时间增加10%,则swap指令在程序中占多大的比例才值得用硬件方式来实现?

参考答案:

(1)swap指令可用以下三条指令实现。

xor$rs,$rs,$rt

xor$rt,$rs,$rt

xor$rs,$rs,$rt

(若使用额外寄存器$rtemp,则$rtemp内容会被破坏,所以伪指令一般不能用额外寄存器)

add$rtemp,$rs,$zero

add$rs,$rt,$zero

add$rt,$rtemp,$zero

(若使用加减法,,可能溢出。

如使用无符号数加减法addu,subu也可以)

add$rs,$rs,$rt

sub$rt,$rs,$rt

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条指令之间。

13.对于多周期MIPS处理器,假定将访问数据的过程分成两个时钟周期可使时钟频率从4.8GHz提高到5.6GHz,但会使得lw和sw指令增加时钟周期数。

已知基准程序CPUint2000中各类指令的频率为:

Load:

25%,Store:

10%,Branch:

11%,Jump:

2%,ALU:

52%。

以基准程序CPUint2000为标准计算时钟频率提高后处理器的性能提高了多少?

若将取指令过程再分成两个时钟周期,则可进一步使时钟频率提高到6.4GHz,此时,时钟频率的提高是否也能带来处理器性能的提高?

为什么?

参考答案:

三种频率的机器上,各类指令的百分比和CPI

Load

Store

Branch

Jump

ALU

25%

10%

11%

2%

52%

M14.8GHz

5

4

3

3

4

M25.6GHz

6

5

3

3

4

M36.4GHz

7

6

4

4

5

三种机器的平均CPI和MIPS

CPIofM1=25%x5+10%x4+11%x3+2%x3+52%x4=4.12CPIofM2=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.4G/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#若数据块长度为0,则结束

compare:

lw$t4,0($t1)#块1的当前数据取到$t4

lw$t5,0($t2)#块2的当前数据取到$t5

bne$t4,$t5,done#$t4和$t5的内容不等,则结束

addi$t1,$t1,4#块1中的当前数据指向下一个

addi$t2,$t2,4#块2中的当前数据指向下一个

addi$t3,$t3,-1#比较次数减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。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1