1、第6章 习题课1相对于微程序控制器,硬布线控制器的特点是A指令执行速度慢,指令功能的修改和扩展容易B指令执行速度慢,指令功能的修改和扩展难C指令执行速度快,指令功能的修改和扩展容易 D指令执行速度快,指令功能的修改和扩展难2. 下列寄存器中,汇编语言程序员可见的是A存储器地址寄存器(MAR)B程序计数器(PC)C存储器数据寄存器(MDR)D指令寄存器(IR)3. 下列选项中,不会引起指令流水线阻塞的是A数据旁路(转发)B数据相关C条件转移D资源冲突4. 5. 某16位计算机中,带符号整数用补码表示,数据Cache和指令Cache分离。下表给出了指令系统中部分指令格式,其中Rs和Rd表示寄存器,
2、mem表示存储单元地址,(x)表示寄存器x或存储单元x的内容。表 指令系统中部分指令格式该计算机采用5段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)和结果写回寄存器(WB),流水线采用“按序发射,按序完成”方式,没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题。(1)若int型变量x的值为-513,存放在寄存器Rl中,则执行指令“SHR R1” 后, R1的内容是多少? (用十六进制表示)(2)若某个时间段中,有连续的4条指令进入流水线,在其执行过程中没有发生任何阻塞,则执
3、行这4条指令所需的时钟周期数为多少?(3)若高级语言程序中某赋值语句为x=a+b, x、a和b均为int型变量,它们的存储单元地址分别表示为x、a和b,该语句对应的指令序列及其在指令流水线中的执行过程如题下图所示。I1 LOAD R1,aI2 LOAD R2,bI3 ADD R1, R2I4 STORE R2,x则这4条指令执行过程中,I3的ID段和I4的IF段被阻塞的原因各是什么?(4)若高级语言程序中某赋值语句为x=2*x+a, x和a均为unsigned int类型变量,它们的存储单元地址分别表示为x、a,则执行这条语句至少需要多少个时钟周期?要求模仿题上图画出这条语句对应的指令序列及其
4、在流水线中的执行过程示意图。6. 某CPU主频为1.03GHz,采用4级指令流水线,每个流水线的执行需要1个时钟周期。假定CPU执行了100条指令,在其执行过程中,没有发生任何流水线阻塞,此时流水线的吞吐率为( )A. 0.25109条指令/秒 B. 0.97109条指令/秒 C. 1.0109条指令/秒 D. 1.03109条指令/秒7. 某计算机采用16位定长指令字格式,其CPU中有一个标志寄存器,其中包含进位/借位标志CF、零标志ZF和符号标志NF。假定为该机设计了条件转移指令,其格式如下:7 010 9 80 0 0 0 0CZNOFFSET15 11其中,00000为操作码OP;C、
5、Z和N分别为CF、ZF和NF的对应检测位,某检测位为1时表示需检测对应标志,需检测的标志位中只要有一个为1就转移,否则不转移。例如,若C=1,Z=0,N=1,则需检测CF和NF的值,当CF=1或NF=1时发生转移;OFFSET是相对偏移量,用补码表示。转移执行时,转移目标地址为(PC)+2+2*OFFSET;顺序执行时,下条指令地址为(PC)+2。请回答下列问题。(1)该计算机存储器按字节编址还是按字编址?该条件转移指令向后(反向)最多可跳转多少条指令?(2)某条件转移指令的地址为200CH,指令内容如下图所示,若该指令执行时CF=0,ZF=0,NF=1,则该指令执行后PC的值是多少?若该指令
6、执行时CF=1,ZF=0,NF=0,则该指令执行后PC的值又是多少?请给出计算过程。7 010 9 80 0 0 0 00111110001115 11(3)实现“无符号数比较 小于等于时转移”功能的指令中,C、Z和N应各是什么?(4)以下是该指令对应的数据通路示意图,要求给出图中部件的名称或功能说明。答案:(1)指令长度为16位,下条指令地址为(PC)+2,故每条指令占2个地址,因此编址单位是字节。指令中指出的偏移量为8位补码,范围为-128-+127,转移执行时,转移目标地势为(PC)+2+2*OFFSET,因此相对于当前执行的条件转移指令,向后(高地址)最多可跳转2*127个地址,也就是
7、向后最多可跳转127条指令。(2)指令中C=0,Z=1,N=1,所以需要根据ZF和NF的值来判断是否转移,当CF=0,ZF=0,NF=1时,需要转移: 指令中偏移量为补码1110 0011,乘2即左移一位,得到:11000110=C6H,要与16位的PC相加,需要做16位符号扩展:FFC6H,然后200CH+2+FFC6H=1FD4H。 当CF=1,ZF=0,NF=0时,不转移,故PC=200CH+2=200EH。(3) “无符号数比较 小于等于时转移”功能的指令中,C=1,Z=1,N=0。(4)部件用于存放当前正在执行的指令,所以是指令寄存器;部件用于对指令中的偏移量进行左移一位操作,故为移
8、位寄存器;部件实现转移成功时的地址相加操作,故为专用地址加法器。8. 某计算机采用微程序控制器,共有32条指令,公共的取指微程序包含2条微程序,各指令对应的微程序平均由4条微指令组成,采用断定法(下址字段法)确定下条微指令的地址,则微指令中下址字段的位数至少是: A.5 B.6 C.8 D.99. 某程序中有如下循环代码段p:for (i=0;iN;i+) sum+=Ai。假设编译时变量sum和i分别分配在寄存器R1和R2中。常量N在寄存器R6中,数组A的首地址在寄存器R3中,程序段P起始地址为0804 8100H,对应的汇编代码和机器代码如下表所示。编号地址机器代码汇编代码注释1080481
9、00H00022080HLoop:sll R4,R2,2(R2)2R4208048104H00083020H Add R4,R4,R3(R4)+(R3)R4308048108H8C850000HLoad R5,0(R4)(R4)+0)R540804810CH00250820HAdd R1,R1,R5(R1)+(R5)R1508048110H2042000HAddi R2,R2,1(R2)+1R2608048114H1446FFFAHBne R2,R6,loopIf (R2)!=(R6) goto loop执行上述代码的计算机M采用32位定长指令字,其中分支指令Bne采用如下格式 :20 162
10、5 21OPRsRdOFFSET31 2615 0OP为操作码,Rs和Rd为寄存器编号;OFFSET为偏移量,用补码表示。请回答下列问题,并说明理由。(1)M的存储器编址单位是什么?(2)已知sll指令实现左移功能,数组A中每个元素占多少位?(3)上表中的bne指令的OFFSET字段的值是多少?已知bne指令采用相对寻址方式,当前PC内容为bne指令地址,通过分析表中指令地址和bne指令内容,推断出bne指令的转移目标地址计算公式。(4)若M采用如下“按序发射、按序完成”的5级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发
11、措施,分支指令的执行均引起3个时钟周期阻塞,则P中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?该题是综合题型,涉及指令系统、存储管理和CPU三部分内容。(1)已知计算机M采用32位定长指令字,即一条指令占4B,观察表中各指令的地址可知,每条指令的地址差为4个地址单位,即4个地址单位,即4个地址单位代表4B,一个地址单位就代表了1B,所以该计算机按字节编址的。(2分)(2)在二进制中某数左移2位相当于乘以4,由该条件可知,数组间的数据间隔为4个地址单位,而计算机按字节编址,所以数组A中每个元素占4B。(2分)
12、(3)由表可知,Bne指令的机器代码为1446FFFAH,根据题目给出的指令格式,后2B的内容为OFFSET字段,所以该指令的OFFSET字段为FFFAH,用补码表示,值为-6 。(1分)当系统执行到Bne指令时,PC自动加4,PC的内容就为08048118H,而跳转的目标是08048100H,两者相差了18H,即24个单位的地址间隔,所以偏地址的一位即是真实跳转地址的-24/-6=4位。(1分) 可知bne指令的转移目标地址计算公式为(PC)+4+OFFSET*4。(1分) (4)由于数据相关而发生阻塞的指令为第2、3、4、6条,因为第2、3、4、6条都与前一条指令发生数据相关。(3分) 第
13、6条指令会发生控制冒险。(1分)当前循环的第5条指令与下次循环的第一条指令虽然有数据相关,但由于第6条指令后有3个时钟周期的阻塞,因而消除了该数据相关。(1分)补充知识:流水线处理中,由于各个阶段的依赖关系、硬件资源的竞争等原因,会出现操作无法执行的情况。造成流水线故障的原因称为冒险,冒险分为构造、数据冒险和控制冒险3 种类型。构造冒险构造冒险是指由于硬件资源的竞争,操作无法同时执行的情况。流水线结构中,内存访问会造成构造冒险。IF 阶段和MEM 阶段都要涉及内存访问。由于访问内存使用的总线是共享资源,无法同时进行操作。因此,如果发生IF 阶段和MEM 阶段同时访问内存的情况,一方需要等待另一
14、方访问完成。这种指令和数据使用同一通道的构造称为诺依曼架构。如果导致冒险产生的硬件资源数量足够多,也可以避免冒险问题的发生。因此,指令用的内存和数据用的内存分别设置,即可解决构造冒险的问题。这种物理上将指令用和数据用的内存与访问通道分开的构造称为哈佛架构。图1-87 分别展示了诺依曼架构和哈佛架构。哈佛架构的优点是,就算指令访问和数据访问同时发生,也不会发生冒险的情况。但是,也有指令和数据地址空间不同的缺点。在哈佛架构中,指令的0 号地址和数据的0 号地址指向不同的内容。这会引起软件设计上的问题。近年来,大部分CPU 的指令和数据都放在同一内存中。但是,CPU 直接访问的缓存基本上都分为指令用
15、和数据用两种,称为指令缓存和数据缓存。图1-88 展示了带有缓存的CPU 构造。通过两种缓存的使用,解决了指令访问和数据访问之间发生的构造冒险问题。数据冒险数据冒险是指,由于指令执行所需要的数据还未准备好所引起的冒险情况。当即将执行的指令依赖于还未处理完成的数据时,会导致指令无法立刻开始执行,引发数据冒险。为了回避数据冒险,我们使用一种称为直通(Forwarding)的方法。原本回写运算结果是在WB 阶段,但实际上决定运算结果是在EX 阶段。因此直通是指在运算结果确定的EX 阶段,将数据直接传递给下一个指令。直通的示例如图1-89 所示。示例中使用流水线执行3 条有数据依赖关系的指令, 以此说
16、明直通的动作原理。第二条指令要使用第一条指令的结果。第一条指令在EX 阶段可以确定运算结果后,直接将结果发送到处于ID 阶段的第二条指令。第三条指令同时依赖于第一和第二条指令。因此,可以直接从处于MEM 阶段的第一条指令和处于EX 阶段的第二条指令获取数据。以这种将运算结果直通的方式,可以消除原本需要等待WB 阶段完成的依赖关系。使用直通解决依赖关系的方法仅有一个例外,就是数据需要使用Load 指令从内存调取的情况。由于内存的访问在MEM 阶段执行,因此处理结果要在MEM 阶段才能确定。而当前指令执行到MEM 结束时,下一条指令已经到达EX 阶段执行了。这与直通的机制不吻合。这种依赖Load
17、指令而发生的冒险称为Load 冒险。Load 冒险不能从根本上避免, 因此要将有依赖关系的指令进行阻塞以解决该问题。阻塞是指让流水线的特定阶段停止一段时间。Load 冒险发生时的流水线动作如图1-90 所示。如果有Load 冒险发生,则将有依赖关系的指令延迟一个周期执行。如果将指令阻塞一个周期,前一条指令在MEM 阶段得到的数据就可以直通正在ID 阶段的下一条指令。这时候,流水线会浪费一个周期,这一周期让其传递无效的数据即可。这个操作称为流水线冒泡。如果Load 指令与和其有依赖关系的指令相差一条以上指令的距离,则不会发生Load 冒险。作为有效的处理操作的方法,在编译器中使用适当的调度算法也
18、可以有效避免Load 冒险。控制冒险控制冒险是指无法确定下一条指令而引发的冒险情况。在执行可能会改变下一条指令的分支指令时,在这一条指令执行结果确定之前下一条指令无法开始执行,从而引起控制冒险。控制冒险也无法从根本上避免,但是可以尽量将分支指令安排到流水线前段,从而减少因为控制冒险而引起的无效指令数量。比如在ID 阶段判定分支后,延迟一个周期就可以开始执行分支指向的下一条指令。控制冒险发生时的流水线动作如图1-91 所示。因为在读取下一条指令前需要确定PC 寄存器的值,即使在ID 阶段判定分支也会产生一个周期的延迟。延迟期间会让流水线传送无效数据。流水线冒泡会浪费硬件资源, 因此可以采用延迟分支的方法,许可分支指令的下一条指令执行。延迟分支是指分支指令执行后并不立刻跳转到分支结果指向的指令,在分支指令的下一条指令执行完毕后再进行跳转。分支指令的下一条指令称为延迟间隙,不论分支是否成立都会被执行。使用延迟分支可以避免流水线冒泡,使操作的处理更有效率。一般的分支与延迟分支如图1-92 所示,采用了延迟分支的流水线执行过程如图1-93 所示。