43.(8分)某计算机的CPU主频为500MHz,CPI为5(即执行每条指令平均需5个时钟周期)。假定某外设的数据传输率为0.5MB/s,采用中断方式与主机进行数据传送,以32位为传输单位,对应的中断服务程序包含18条指令,中断服务的其他开销相当于2条指令的执行时间。请回答下列问题,要求给出计算过程。(1)在中断方式下,CPU用于该外设I/O的时间占整个CPU时间的百分比是多少?(2)当该外设的数据传输率达到5MB/s时,改用DMA方式传送数据。假定每次DMA传送块大小为5000B,且DMA预处理和后处理的总开销为500个时钟周期,则CPU用于该外设I/O的时间占整个CPU时间的百分比是多少?(假设DMA与CPU之间没有访存冲突)43.解答:(1)按题意,外设每秒传送0.5MB,中断时每次传送4B。中断方式下,CPU每次用于数据传送的时钟周期为5×18+5×2=100。为达到外设0.5MB/s的数据传输率,外设每秒申请的中断次数为0.5MB/4B=125000。1s内用于中断的开销为100×125000=12500000=12.5M个时钟周期。CPU用于外设I/O的时间占整个CPU时间的百分比为12.5M/500M=2.5%。(2)当外设数据传输率提高到5MB/s时,改用DMA方式传送,每次DMA传送5000B,1s内需产生的DMA次数为5MB/5000B=1000。CPU用于DMA处理的总开销为1000×500=500000=0.5M个时钟周期。CPU用于外设I/O的时间占整个CPU时间的百分比为0.5M/500M=0.1%。【评分说明】如果考生只给出正确的计算结果,未给出计算过程,每个给2分。44.(13分)某计算机字长为16位,采用16位定长指令字结构,部分数据通路结构如图A-2所示,图中所有控制信号为1时表示有效、为0时表示无效。例如,控制信号MDRinE为1表示允许数据从DB打入MDR,MDRin为1表示允许数据从内总线打入MDR。假设MAR的输出一直处于使能状态。加法指令“ADD(R1),R0”的功能为(R0)+((R1))→(R1),即将R0中的数据与R1的内容所指主存单元的数据相加,并将结果送入R1的内容所指主存单元中保存。图A-2表A-1给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。........表A-1时钟功能有效控制信号C1MAR←(PC)PCout,MARinC2MDR←M(MDR)PC←(PC)+1MemR,MDRinE,PC+1C3IR←(MDR)MDRout,IRinC4指令译码无44.解答:题干已给出取值和译码阶段每个节拍的功能和有效控制信号,我们应以弄清楚取指阶段中数据通路的信息流动作为突破口,读懂每个节拍的功能和有效控制信号。然后应用到解题思路中,包括划分执行步骤、确定完成的功能、需要的控制信号。先分析题干中提供的示例(本部分解题时不做要求):取指令的功能是根据PC的内容所指主存地址,取出指令代码,经过MDR,最终送至IR。这部分和后面的指令执行阶段的取操作数、存运算结果的方法是相通的。C1:(PC)→MAR在读写存储器前,必须先将地址(这里为(PC))送至MAR。C2:M(MAR)→MDR,(PC)+1→PC读写的数据必须经过MDR,指令取出后PC自增1。C3:(MDR)→IR然后将读到MDR中指令代码送至IR进行后续操作。指令“ADD(R1),R0”的操作数一个在主存中,一个在寄存器中,运算结果在主存中。根据指令功能,要读出R1的内容所指的主存单元,必须先将R1的内容送至MAR,即(R1)→MAR。而读出的数据必须经过MDR,即M(MAR)→MDR。因此,将R1的内容所指主存单元的数据读出到MDR的节拍安排如下:C5:(R1)→MARC6:M(MAR)→MDRALU一端是寄存器A,MDR或R0中必须有一个先写入A中,如MDR。C7:(MDR)→A然后执行加法操作,并将结果送入寄存器AC。C8:(A)+(R0)→AC之后将加法结果写回到R1的内容所指主存单元,注意MAR中的内容没有改变。C9:(AC)→MDRC10:(MDR)→M(MAR)有效控制信号的安排并不难,只需看数据是流入还是流出,如流入寄存器X就是Xin,流出寄存器X就是Xout。还需注意其他特殊控制信号,如PC+1、Add等。于是得到参考答案如下:时钟功能有效控制信号C5MAR←(R1)R1out,MARinC6MDR←M(MAR)MemR,MDRinEC7A←(MDR)MDRout,AinC8AC←(A)+(R0)R0out,Add,ACinC9MDR←(AC)ACout,MDRinC10M(MAR)←(MDR)MDRoutE,MemW本题答案不唯一,如果在C6执行M(MAR)→MDR的同时,完成(R0)→A(即选择将(R0)写入A),并不会发生总线冲突,这种方案可节省1个节拍,见下表。时钟功能有效控制信号C5MAR←(R1)R1out,MARinC6MDR←M(MAR),A←(R0)MemR,MDRinE,R0out,AinC7AC←(MDR)+(A)MDRout,Add,ACinC8MDR←(AC)ACout,MDRinC9M(MAR)←(MDR)MDRoutE,MemW43.(11分)某计算机字长为16位,主存地址空间大小为128KB,按字编址。采用单字长指令格式,指令各字段定义如图B-4所示。转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式定义见表B-1。151211650OPMsRsMdRd源操作数目的操作数图B-4表B-1Ms/Md寻址方式助记符含义000B寄存器直接Rn操作数=(Rn)001B寄存器间接(Rn)操作数=((Rn))010B寄存器间接、自增(Rn)+操作数=((Rn)),(Rn)+1→Rn011B相对D(Rn)转移目标地址=(PC)+(Rn)注:(X)表示存储器地址X或寄存器X的内容。请回答下列问题:(1)该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?存储器地址寄存器(MAR)和存储器数据寄存器(MDR)至少各需要多少位?(2)转移指令的目标地址范围是多少?(3)若操作码0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B和101B,R4的内容为1234H,R5的内容为5678H,地址1234H中的内容为5678H,地址5678H中的内容为1234H,则汇编语言为“add(R4),(R5)+”(逗号前为源操作数,逗号后为目的操作数)对应的机器码是什么(用十六进制表示)?该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么?43.解答:(1)操作码占4位,则该指令系统最多可有24=16条指令;操作数占6位,寻址方式占3位,于是寄存器编号占3位,则该机最多有23=8个通用寄存器;主存容量为128KB,按字编址,计算机字长为16位,划分为128KB/2B=216个存储单元,故MDR和MAR至少各需16位。(2)PC和Rn可表示的地址范围均为0~216-1,而主存地址空间为216,故转移指令的目标地址范围为0000H~FFFFH(0~216-1)。(3)汇编语句“add(R4),(R5)+”,对应的机器码为0010001100010101B=2315H。该指令执行后,寄存器R5和存储单元5678H的内容会改变。执行后,R5的内容从5678H变成5679H。存储单元5678H中的内容变成该加法指令计算的结果5678H+1234H=68ACH。44.(12分)某计算机的主存地址空间大小为256MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache行,每个Cache行大小为64B,数据Cache采用直接映射方式。现有两个功能相同的程序A和B,其伪代码如下:程序A:inta[256][256]intsum_array1(){inti,j,sum=0;for(i=0;i256;i++)for(j=0;j256;j++)sum+=a[i][j];returnsum;程序B:inta[256][256]intsum_array2(){inti,j,sum=0;for(j=0;j256;j++)for(i=0;i256;i++)sum+=a[i][j];returnsum;假定int类型数据用32位补码表示,程序编译时i、j、sum均分配在寄存器中,数组a按行优先方式存放,其首地址为320(十进制数)。请回答下列问题,要求说明理由或给出计算过程。(1)若不考虑用于Cache一致性维护和替换算法的控制位,则数据Cache的总容量为多少?(2)数组元素a[0][31]和a[1][1]各自所在的主存块对应的Cache行号分别是多少(Cache行号从0开始)?(3)程序A和B的数据访问命中率各是多少?哪个程序的执行时间更短?44.解答:(1)每个Cache行对应一个标记项,如下图所示。不考虑用于Cache一致性维护和替换算法的控制位。地址总长度为28位(228=256M),块内地址6位(26=64),Cache块号3位(23=8),故Tag的位数为28-6-3=19位,还需使用一个有效位,故题中数据Cache行的结构如下图所示。数据Cache共有8行,因此数据Cache的总容量为8×(64+20/8)B=532B。(2)数组a在主存的存放位置及其与Cache之间的映射关系如下图所示。数组按行优先方式存放,首地址为320,数组元素占4个字节。a[0][31]所在的主存块对应的Cache行号为(320+31×4)/64=6;a[1][1]所在的主存块对应的Cache行号为(320+256×4+1×4)/64%8=5。【另解】由(1)可知主存和Cache的地址格式如下图所示。278650主存地址8650标记块号块内地址Cache地址数组按行优先方式存放,首地址320,数组元素占4个字节。a[0][31]的地址为320+31×4=110111100B,故其对应的Cache行号为110B=6;a[1][1]的地址为320+256×4+1×4=1348=10101000100B,故其对应的Cache行号为101B=5。(3)数组a的大小为256×256×4B=218B,占用218/64=212个主存块,按行优先存放,程序A逐行访问数组a,共需访问的次数为216次,未命中次数为212次(即每个字块的第一个数未命中),因此程序A的命中率为(216-212)/216×100%=93.75%。【另解】数组a按行存放,程序A按行存取。每个字块中存放16个int型数据,除访问的第一个不命中,随后的15个全都命中,访问全部字块都符合这一规律,且数组大小为字块大小的整数倍,故程序A的命中率为15/16=93.75%。程序B逐列访问数组a,Cache总容量为64B×8=512B,数组a一行的大小为1KB,正好是Cache容量的2倍,可知不同行的同一列数组元素使用的是同一个Cache单元,故逐列访问每个数据时,都会将之前的字块置换出,也即每次访问都不会命中,命中率为0。由于从Cache读数据比从主存读数据快很多,所以程序A的执行比程序B快得多。43.(11分)假定在一个8位字长的计算机中运行如下C程序段:unsignedintx=134;unsignedinty=246;intm=x;intn=y;unsignedintz1=x-y;unsigned块号块内地址intz2=x+y;intk1=m-n;intk2=m+n;若编译器编译时将8个8位寄存器R1~R8分别分配给变量x、y、m、n、z1、z2、k1和k2。请回答下列问题。(提示:带符号整数用补码表示。)(1)执行上述程序段后,寄存器R1、R5和R6的内容分别是什么(用十六进制表示)?(2)执行上述程序段后,变量m和k1的值分别是多少(用十进制表示)?(3)上述程序段涉及带符号整数加/减、无符号整