1、假定某计算机1和计算机2以不同的方式实现了相同的指令集,该指令集中共有A、B、C、D 4类指令,它们所占的比例分别为40%、20%、15%和25%。计算机1和计算机2的时钟周期分别为600MHz和800MHz,各类指令在两计算机上的CPI如下表所示。
各类指令在两计算机上的CPI
求两计算机的MIPS各为多少?
答:CPI1= 2*40% + 3*20% + 4*15% + 5*25% = 3.25
MIPS1= f/CPI1 = 600/3.25 = 185
CPI2=2*40% + 2*20% + 3*15% + 4*25% = 2.65
MIPS2= f/CPI2 = 800/2.65 = 302
2、若某程序编译后生成的目标代码由A、B、C、D 4类指令组成,它们在程序中所占比例分别为40%、20%、15%、25%。已知A、B、C、D 四类指令的CPI分别为1、2、2、2。现需要对程序进行编译优化,优化后的程序中A类指令数量减少了一半,而其他指令数量未发生变化。假设运行该程序的计算机CPU主频为500MHz。回答下列各题。(1)优化前后程序的平均CPI各为多少?(2)优化前后程序的MIPS各为多少?(3)通过上面的计算结果,你能得出什么结论?
答:(1)优化前CPI=1* 40% + 2*20% + 2*15% + 2*25% = 1.6
优化后CPI = 1*(2/8) + 2*(6/8) = 1.75
- 优化前MIPS = f/CPI = 500/1.6 = 312.5
优化后MIPS = f/CPI = 500/1.75 = 285.7
(3)优化后CPI增加,MIPS减少,优化失败,应尝试降低CPI最大指令的比例。
3、某32位机共有微操作控制信号52个,构成5个相斥类的微命令组,各组分别包含4个, 5个,8个, 15个和20个微命令。已知可判定的外部条件有CY和ZF两个,微指令字长29位。
(1)给出采用断定方式的水平型微指令格式。
(2)控制存储器的容量应为多少位?
答:(1)微指令的格式如下所示:
(2)控存容量为:
28×29=256 × 29
4、处理机逻辑框图中,有两条独立的总线和两个独立的存储器。已知指令存储器IM最大存储容量为16384字(字长18位),数据存储器DM最大存储容量为65536字(字长16位)。各寄存器均有“打入”和“送出”控制命令,但图中未标注出。写出下列各寄存器的位数:PC; IR;累加寄存器 AC0和AC1;通用寄存器R0—R3;IAR;IDR;DAR;DDR。
答:指令存储器: 16384×18=214×18
数据存储器: 65536×16=216×16
PC=14位 IR=18位 AC0=AC1=16位 R0—R3=16位
IAR=14位 IDR=18位 DAR=16位 DDR=16位
5、CPU数据通路为双总线结构,如图所示。图中:ALU:运算器,IR:指令寄存器,RA:ALU的输入寄存器,PC:程序计数器,R1~R4:程序员可用通用寄存器,MAR:存储器地址寄存器,MDR: 存储器数据寄存器。
(1) 画出修正错误后的连线图。
(2) 描述指令ADD addr,R1(功能是R1+(addr)àaddr)的执行过程。
答:(1)画图
(2)指令ADD addr,R1的执行过程
PCàMAR; MàMDR; MDRàIR; IR(addr)àMAR; MàMDR; MDRàRA
R1àMDR; +; ADDàMDR; addràMAR; MDRàM
6、某计算机字长为16位,采用16位定长指令字格式,部分数据通路如下图所示,图中所有控制信号为1时表示有效、为0时表示无效。例如,控制信号MARinE为1时表示允许数据从DB打入MDR,MDRin为1表示允许数据从内总线打入MDR。假设MAR的输出一直处于使能状态。加法指令”ADD(R1),R0”的功能为(R0)+((R1))à(R1),即将R0中的数据与R1的内容所指主存单元的数据相加,并将结果送入R1的内容所指主存单元中保存。
表1给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式,用表格形式列出指令执行各阶段每个节拍的功能和有效控制信号。
表1
时钟 | 功能 | 有效控制信号 |
C1 | (PC)àMAR | PCout, MARin |
C2 | M(MAR)àMDR, PC+1 | MemR, MDRinE, PC+1 |
C3 | (MDR)àIR | MDRout, IRin |
C4 | 指令译码 | 无 |
答:
时钟 | 功能 | 有效控制信号 |
C5 | (R1)àMAR | R1out, MARin |
C6 | M(MAR)àMDR, (R0)àA | MemR,MDRinE R0out,Ain |
C7 | (MDR)+(A)àAC | MDRout,Add,ACin |
C8 | (AC)àMDR | ACout,MDRin |
C9 | M(MAR)à(MDR) | MDRoutE,MemW |
或者
时钟 | 功能 | 有效控制信号 |
C5 | (R1)àMAR | R1out, MARin |
C6 | M(MAR)àMDR, | MemR,MDRinE |
C7 | MDRàA | MDRout, ACin |
C8 | (R0)+(A)àAC | R0out,Add,ACin |
C9 | (AC)àMDR | ACout,MDRin |
C10 | M(MAR)à(MDR) | MDRoutE,MemW |
7、某机采用微程序控制器设计,已知每一条机器指令的执行过程均可分解成8条微指令组成的微程序,该机指令系统采用6位定长操作码格式,控制寄存器至少应能容纳多少条微指令?如何确定机器指令操作码与该指令微程序的起始地址的对应关系,请给出具体方案。
答:采用6位定长操作码可表示26=64条指令,控存至少应能容纳64×8=512条微指令。
微指令后继地址由微指令的SCF字段产生,若由SCF字段直接给出,SCF字段至少需9位,才能将全部512条微指令统一编码,这种方法所需控存容量较大,微指令地址码长。或者可采用顺序-转移方法产生后继微地址,需增加μPC寄存器,用于指明下一条微指令的微地址,通过改变μPC的值达到转移目的。或者采用断定方法产生后继微地址,需增加测试字段,以实现转移。
9、已知CPU结构如下图所示,其中包括一个累加器AC、一个状态寄存器和其他几个寄存器。各部分之间的连线表示数据通路,箭头表示信息传递方向。试完成以下工作:①写出图中四个寄存器A、B、C、D的名称和作用;②简述完成指令ADD Y的数据通路(Y为存储单元地址,本指令功能为(AC)+(Y)→AC)。
答: A-数据缓冲寄存器DR、B-指令寄存器IR、C-主存地址寄存器AR、D-程序计数器PC。
完成指令ADD Y的数据通路为:PC→AR→MM→DR→IR→Y→AR(MAR)→MM→DR(MDR)→ALU→ADD(控制信号)→AC
10、已知某机采用微程序控制方式,其存储器容量为512×48(位),微程序在整个控制存储器中实现转移,可控制微程序的条件共4个,微指令采用水平型格式,后继微指令地址采用断定方式,如图所示:
(1)微指令中的三个字段分别应多少位?
(2)画出对应这种微指令格式的微程序控制器逻辑框图。
答:(1)假设判别测试字段中每一位为一个判别标志,那么由于有4个转移条件, 故该字段为4位,(如采用字段译码只需3位),下地址字段为9位,因为控制容量为512单元,微命令字段是( 48 – 4 - 9 )= 35 位。
图A
(2)对应上述微指令格式的微程序控制器逻辑框图A所示:其中微地址寄存器对应下地址字段,P字段即为判别测试字段,控制字段即为微命令子段,后两部分组成微指令寄存器。地址转移逻辑的输入是指令寄存器OP码,各状态条件以及判别测试字段所给的判别标志(某一位为1),其输出修改微地址寄存器的适当位数,从而实现微程序的分支转移。
11、假设某机器有86条指令,平均每条指令由12条微指令组成,其中一条是取指微指令,是公用的,已知微指令字长48位,请问控制存储器的容量需多大?
答:共有微指令(12-1)×86+1=947条,即有947个控存单元,需要10位地址线进行译码,即实际的控存单元数应该是1024,所以
控存的容量为1024×48bit。
12、设某机配有A、B、C三台设备,其优先次序为A>B>C,各设备的中断服务程序的执行时间均为20us,现改中断处理次序为A>C>B,请写出各设备的
中断屏蔽字,并按下图所示时间轴给出的设备请求中断的时刻,画出CPU执行程序的轨迹。注:1——屏蔽,0——开放。
答:
13、假设某计算机的指令长度固定为16位,具有双操作数、单操作数和无操作数3类指令,每个操作数地址规定用6位表示。
- 若操作码字段不固定,现已设计出m条双操作数指令、n条无操作数指令,在此情况下,这台计算机最多可以设计出多少条单操作数指令?
(2)若操作码字段不固定,当双操作数指令取最大数时,且在此基础上,单操作数指令条数也取最大值,试计算这3类指令最多可拥有多少条指令?
答:(1)对双操作数指令,指令长度固定为16位,每个操作数地址规定用6位表示,操作码就剩下4位,有16个编码。已设计出m条双操作数指令,剩余(16-m)个编码可扩展为单操作数指令。由双操作数指令扩展操作码为单操作数指令时,扩展操作码位数是6位,每个编码可扩展26 = 64条单操作数指令。由单操作数指令扩展为无操作数指令时,每个编码也可以扩展64条,n条无操作数指令需要n/64个编码。
所以,单操作数指令条数 = (16-m)*64- n/64 条。
- 对双操作数指令,指令长度固定为16位,每个操作数地址规定用6位表示,操作码就剩下4位,有16个编码,当双操作数指令取最大数时,也就是只留一个编码用于扩展,所以双操作数指令条数 = 16-1 = 15 条。
一个编码扩展6位操作码,有26 = 64个编码,单操作数指令条数也取最大值,所以单操作数 = 64-1 = 63 条。
同理,扩展为无操作数指令时,也是26=64个编码,此时不能再扩展了,全部编码都用于无操作数指令,所以无操作数指令条数 = 64 条
14、某计算机A有60条指令,指令的操作码字段固定为6位,从000000~111011,该计算机的后续机型B中需要增加32条指令,并与A保持兼容。试采用扩展操作码为计算机B设计指令操作码。
答:可以采用扩展操作码方式,已经使用了000000~111011,还剩下4个编码111100~111111 用于扩展指令。而后续机型B中需要增加32条指令,每个编码只需扩展8条指令,需要占用地址字段 3 位即可表示32条新指令。
15、假定在一个8位字长的计算机中运行如下C语言程序段。
unsigned int x=134;
unsigned int y=246;
int m=x;
int n=y;
unsigned int z1=x-y;
unsigned int z2=x+y;
int k1=m-n;
int k2=m+n;
若编译器编译时将8个8位寄存器R1~R8分别分配给变量x、y、m、n、z1、z2、k1和k2。请回答下列问题(提示:带符号整数用补码表示)。
- 执行上述程序段后,寄存器R1、R5和R6中的内容分别是什么?(用十六进制表示)
- 执行上述程序段后,变量m和k1的值分别是多少?(用十进制表示)
- 上述程序段涉及带符号整数加减、无符号整数加减运算,这4种运算能否利用同一个加法器及辅助电路实现?简述理由。
(4)计算机内部如何判断带符号整数加减运算的结果是否发生溢出?上述程序段中,哪些带符号整数运算语句的执行结果会发生溢出?
答:(1)(R1)=86H,(R5)=90H,(R6)=7CH
- m=-122,k1=-112。
- 能。带符号整数加减、无符号整数加减运算只有溢出判断方法不同,计算过程是一样的。
- 如果符号位进位Cf和最高数据位进位Cd不同,则结果溢出。最后一条语句执行时会发生溢出。
16、一位全加器(FA)的求和输出Si,进位输出Ci+1的逻辑表达式如下:
Si=Ai⊕Bi⊕Ci
Ci+1=AiBi+(Ai⊕Bi)Ci
①给定二输入与门、二输入或门、异或门三种器件,绘制一位全加器FA的逻辑单元电路图;②用FA(框图表示)设计出n位行波进位加减器(含溢出电路)。
答:(1)一位全加器FA的逻辑单元电路图(5分):
(2)用FA(框图表示)设计n位行波进位加减器(含溢出电路)(5分):
17、有实现x*y的两个C语言函数如下:
unsigned umul( unsigned x, unsigned y)
{ return x*y;}
int imul(int x,int y)
{ return x*y;}
假定某计算机M中ALU只能进行加减运算和逻辑运行,请回答:
(1)若M的指令系统中没有乘法指令,但有加法、减法和位移等指令,则M上也能实现上述两个函数中的乘法运算,为什么?
(2)若M上的指令系统中有乘法指令,则基于ALU、位移器、寄存器以及相应控制逻辑实现乘法指令时,控制逻辑的作用是什么?
(3)针对以下3种情况:(a)没有乘法指令;(b)有使用ALU和位移器实现的乘法指令;(c)有使用阵列乘法器实现的乘法指令,函数umul()在哪种情况下执行时间最长?哪种情况下执行时间最短?说明理由
(4)n为整数乘法指令可保存2n位乘积,当仅取n位作为乘积时,其结果可能会发生溢出。当n=32,x=231-1,y=2时,带符号整数乘法指令和无符号整数乘法指令得到的x*y的2n位乘积分别是什么(用十六进制表示)?此时函数umul()和imul()的返回结果是否溢出?对于无符号整数乘法运算,当仅取乘积的低n位作为乘法结果时,如何用2n位乘积进行溢出判断?
答:(1)乘法运算也可以通过加法操作和移位操作实现,x*y可视为y个x或x个y相加的结果
(2)实现相加和移位的控制
(3)最长是a;最短是c
(a)情况下时间最长,需要利用其它指令来实现乘法功能
(b)情况下使用了ALU与位移器,由多次相加及位移操作串行实现乘法操作
(c)情况下使用阵列乘法器做并行乘法运算,时间显然最快
(4)带符号整数乘法指令:7FFF FFFFH*2 = 0000 0000 FFFF FFFEH
无符号整数乘法指令:7FFF FFFFH*2 = 0000 0000 FFFF FFFEH
umul()返回FFFF FFFEH,未溢出
imul()返回FFFF FFFEH,有溢出,因为结果成了负数
高n位全0则未产生溢出,否则产生溢出
18、设某运算器只由一个加法器和A、B两个D型边沿寄存器组成,A、B均可接加法器输出,A还可接收外部数据,如图所示,问:
- 外部数据如何才能传送到B?
(2) 如何实现A+B-->A和A+B-->B?
(3) 如何估算加法执行时间?
答:(1) 外部数据传送到B的操作:S选D,CPA,A-->∑,M,CPB
(2) 实现A+B-->A的操作:A-->∑,B-->∑,+,S选∑,CPA
实现A+B-->B的操作:A-->∑,B-->∑,+,CPB
(3) 影响加法速度的关键因素是进位信号的传递问题,所以估算加法执行时间要看∑加法器采用何种进位方式,分析进位信号的产生时间。
19、设存储器容量为64M字,字长为64位,模块数m=8,分别用顺序和交叉方式进行组织。存储周期T=100ns,数据总线宽度为64位,总线传送周期t=50ns。求:顺序存储器和交叉存储器的带宽各是多少?
答:顺序存储器和交叉存储器连续读出m=8个字的数据信息量为
q=8×64=512位
顺序存储器所需要的时间为
t1=m×T=8×100ns=800ns=8×10-7s
故顺序存储器的带宽为
W1=q/t1=512/(8×10-7)=65×107[bit/s]
交叉存储器所需要的时间为
t2= T+ (m-1)×τ=100ns + (8 -1) ×50ns= 450ns =4.5×10-7s
故交叉存储器的带宽为
W1=q/t1=512/(4.5×10-7)=114×107[bit/s]
20、用4个32K×8位SRAM存储芯片可设计出哪几种不同容量和字长的存储器?画出相应设计图并完成与CPU的连接。
答:可分别设计128K×8位、64K×16位、32K×32位的存储器。
128K×8位
64K×16位
32K×32位
21、设计算机指令长度为20位,具有双操作数、单操作数、无操作数3类指令形式,每个操作数地址规定用6位表示。若双操作数指令的操作码字段为8位,采用定长扩展操作码,现设计出m条双操作数指令,n条无操作数指令,在此条件下,计算机最多设计出多少条单操作数指令?
答:设最多设计出x条单操作数指令,则 [(256-m)*26-x]*26 = n
X = (256-m)*26 – n/26
22、设Cache存取周期为45ns、RAM存取周期为200ns,CPU执行某一段程序过程中,访问存储系统为1000次,其中访问主存为10次,问:
(1) Cache的命中率是多少?
(2) 访问内存的平均时间是多少?
(3) Cache-主存的效率是多少?
答:(1) Cache的命中率h = (1000-10)/1000 = 99%
(2) 访问内存的平均时间 Ta = h.tc+(1-h)tM = 99%*45+1%*200 = 46.55 ns
(3) Cache-主存的效率 = Tc/Ta = 45/46.55 = 96.7%
23、要求用128K×16位的SRAM芯片设计512K×16位的存储器,SRAM芯片有两个控制端:当 CS 有效时该片选中。当W/R=1时执行读操作,当W/R=0时执行写操作。用64K×16位的EPROM芯片组成128K×16位的只读存储器。 EPROM存储单元地址从0开始连续编址,SRAM存储单元地址接在其后连续编址。试问:
(1)数据寄存器多少位?
(2)地址寄存器多少位?
(3)共需多少片EPROM?
(4)画出此存储器组成框图。
(5)各芯片的存储地址范围分别是多少?
答:(1)存储器的总容量为:512K×16位(SRAM)+128K×16位(EPROM)=640K×16位。 数据寄存器16位。
(2)因为220=1024K>640K,所以地址寄存器20位。
(3)所需EPROM芯片数为(128K×2B)/(64K×2B)=2(片)
(4)设存储器地址空间分配如下:
128K EPROM 512K SRAM
24、用16K*8b 的存储芯片构建128K*32b的存储器,其中08000H~0BFFFH存储空间保留不用,画出CPU与存储器的逻辑连接图。
答:所需芯片数量:
(128K-16k )* 32/ (16K*8) = 7*4=28
数据位从8位到32位需要4个芯片进行位扩展,地址位从16K到128K需要7组芯片进行字扩展,共28个芯片,
地址由16K到128K,每组芯片的地址空间:
08000H-->~0BFFFH的容量: 0 1000 0000 0000 0000
0 1011 1111 1111 1111
A14-16是片选线,该地址范围的片选值是010,即3-8译码器的010输出线不要连接存储器。
连接图如下。
25、一台模型机共有7条指令,主频25MHz,各指令的使用频率与CPI如下。该模型机有8位和16位两种指令字长,采用2-4扩展操作码。8位字长指令为寄存器(R-R)二地址类型,16位字长指令为寄存器-存储器(R-M)二地址变址寻址类型(-128<=变址范围<=127)。
指令(字长) 使用频度f CPI
I1(8位) 35% 1
I2(8位) 25% 2
I3(8位) 20% 2
I4(16位) 10% 2
I5(16位) 5% 1
I6(16位) 3% 2
I7(16位) 2% 2
求:(1) 计算该机的MIPS速率。(2) 计算操作码的平均码长。(3) 该机允许使用多少个可编址的通用寄存器,多少变址寄存器?(4) 设计该机的两种指令格式,标出各字段位数并给出操作编码。
答:(1)根据题意,平均CPI为
35%*1+(25%+20%+10%)*2+5%*1+3%*2+2%*2 = 1.6 (C/I)
f = 25MHz = 25M C/S
MIPS = f / CPI = (25M C/S) / (1.6 C/I) = 15.625 MIPS
- 操作码的平均码长 (35%+25%+20%)*2+(10%+5%+3%+2%)* 4 = 2.4
(3)该机允许使用8个可编址的通用寄存器,2个变址寄存器。
(4)两种指令格式分别是:
OP(2) R1(3) R2(3)
OP(4) R1(3) A2(1) M(8)
操作编码分别是
I1 00 I2 01 I3 10 I4 1100 I5 1101 I6 1110 I7 1111
26、浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和溢出判断等步骤。设浮点数的阶码和尾数均采用补码表示,且尾数分别为5位和7位(均含2位符号位)。若有两个数X=27*29/32,Y=25*5/8,请用浮点加法计算X+Y。
答:为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:
[ X ]浮 = 00 111 , 00.11101
[ Y ]浮 = 00 101 , 00.10100
- 求阶差并对阶:
ΔE = Ex – Ey = [ Ex]补 + [ - Ey]补 = 00 111 + 11 011 = 00 010
即ΔE为 +2,x的阶码大,应使My 右移2位,Ey加2,
[ Y ]浮 = 00 111 , 00.00101 (00 舍去)
- 尾数和
00. 1 1 1 0 1
00. 0 0 1 0 1
01. 0 0 0 1 0
- 规格化处理
尾数运算结果的2位符号位不同,应执行右规处理,结果为00.10001,阶码要+1,为01 000 。
- 舍入处理
采用0舍1入法处理,仍为00.10001
- 判溢出
阶码符号位为01 ,溢出,故得最终结果是溢出。
27、已知x = -0.01111,y = +0.11001 求 [1/2 x]补,[1/4 x]补,[-x]补,[y]补,[1/2 y]补,[1/4 y]补,[-y]补,[x+y]补, [x-y]补,并判断是否溢出。
答: [X]补=1.10001 [1/2 x]补= 1.110001 [1/4 x]补=1.1110001 [-X] 补=0.01111 [Y] 补=0.11001 [1/2 y]补=0.011001 [1/4 y]补=0.0011001
[-Y] 补=1.00111
[X+Y]补=[X]补+[Y]补 [X-Y]补=[X]补+[-Y]补 即
11. 10001 11. 10001
+ 00. 11001 + 11. 00111
00. 01010 10. 11000
X+Y=+0.01010 结果正确 X-Y 结果发生溢出
28、用下列芯片构成存储系统,各需多少RAM芯片?需要多少位地址作为片选地址译码?设系统为20位地址线,采用全译码方式。
(1)512×8位RAM构成16KB的存储系统;
(2)2K×4位RAM构成64KB的存储系统。
答:可应用公式: 芯片数 = 存储器系统的存储容量/芯片容量
(1)芯片数 = 16K×8位/(0.5K×8位)= 32,需要5位地址作为片选地址译码。
(2)芯片数 = 64K×8位/(2K×4位)= 64,需要5位地址作为片选地址译码。
29、用16K×16位的SRAM芯片构成64K×32位的存储器。要求画出CPU与各存储器芯片的连接图。
答:所需芯片总数(64K×32)÷(16K×16)= 8片
需要进行字位扩展,数据从16位扩展到32位,需要2片芯片为一组,地址从16K到64K,需要4组,共8片芯片,通过A15、A14进行2:4译码.
30、某计算机的主存地址空间大小为256MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache行,每个Cache行大小为64B,数据Cache采用直接映射方式。现有两个功能相同的程序A和B,其伪代码如下:
程序A:
int a[256][256];
......
int sum_array1() {
int i,j,sum=0;
for(i=0;i<256;i++)
for(j=0;j<256;j++)
sum+=a[i][j];
return sum; }
程序B:
int a[256][256];
......
int sum_array1() {
int i,j,sum=0;
for(j=0;j<256;j++)
for(i=0;i<256;i++)
sum+=a[i][j];
return sum; }
假设int用32位补码表示,程序编译时i、j、sum均分配在寄存器中,数组a按行优先方式存放,其首地址为320(十进制)。请回答下列问题,并说明理由
(1) 若不考虑用于Cache一致性维护和替换算法的控制位,则数据Cache的总容量为多少?
注:每个Cache行的格式如下:
有效位 脏位 替换控制位 标记 有效数据
(2)数组元素a[0][31]和a[1][1]各自所在的主存块对应的Cache行号分别是多少(Cache行从0开始)
(3)程序A和B的数据访问命中率各是多少?哪个程序的执行时间更短?
答:(1)此处不考虑一致性维护和替换算法,每个Cache行就只有1位有效位、19位标记和64B数据,19位标记的理由是:内存地址空间256MB(228)需28位地址,块内地址6位26=64B),Cache块号3位(23=8),故Tag位数为28-6-3=19。
数据Cache共8行,因此数据Cache的总容量为8*(64+20/8)=532B
- 主存和Cache的地址格式如下:
数组按行优先方式存放,首地址320,数组元素占4字节。A[0][31]的地址为320+31*4=444=1 1011 1100B,其对应的Cache行号为110B=6;a[1][1]的地址为320+256*4+1*4=1348=101 0100 0100B,其对应的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快得多。或者说程序A的空间局部性好得多。
31、设某计算机采用直接地址映像Cache,已知主存容量为4MB,Cache容量为4096B,字块长度为8个字(32位/字)。
(1)给出Cache和主存的地址格式;
(2)若CPU依次从主存单元0,1,……,99和4096,4097,…,4195交替取指令,循环执行10次,命中率为多少?说明理由。
答:(1) Cache容量为4096B,4096B=4KB=212B,所以Cache的地址为12位;块的大小为8×4=32字节,所以块内地址为5位,块地址为7位。Cache地址格式为
11 5 4 0
块地址 块内地址
主存容量为4MB,4MB=222B,所以主存地址为22位;块大小为32字节,所以块内地址为5位,块地址为7位,块标记为10位。主存地址格式为:
21 12 11 5 4 0
块标记 块地址 块内地址
(2) 命中率计算:
主存与Cache之间以字块为单位进行交换,一次从主存读出一个字块到Cache,主存单元从0到7和从4096到4103是被映像到同一块上的(即第0块)。同理,8到15和4104到4111也是被映像到同一块上的,依此类推,即循环次数对命中率没有影响。所以命中率的情况是:每次取主存单元一块的第一个单元都不命中,但当字块调入Cache后,其他7个单元能命中,而96-99单元中只有3个是命中的,所以命中率是 (100-13)/100=87%。
32、设CPU执行一段程序时,访问Cache次数Nc=2000,访问主存次数Nm=100,又假设访问Cache存取周期为50ns,访问主存存取周期为250ns,试求命中率h、平均访问时间ta以及倍率r。
答:①求命中率h
33、选用1M×4位DRAM芯片构成32位机(设存储器数据总线为32位)的存储器,存储容量为16MB,试问:
(1)共计需要多少片?
(2)共计需要分几组?每组多少片?
答:(1) 16MB/(1M×4位)=32片
(2) 分为4组,每组8片
34、假设存储器按字节编址,四种CPU主存地址分别为16位、20位、24位以及32位,试问每种CPU可寻址内存多少字节?
答: 64KB,1MB,16MB,4GB。
- 已知Intel 6264 RAM芯片的存储容量为8KB,要求选用5片6264 RAM芯片接在系统中,地址范围从F0000H开始,选用74LS138三一八译码器及逻辑门电路,通过全译码方式译码产生片选,试设计出译码电路,并计算每个片选的地址范围。
答:
^^
36、设机器字长32位,定点表示,尾数31位,数符1位,问:
(1)定点原码整数表示时,最大正数是多少?最小负数是多少?
(2)定点原码小数表示时,最大正数是多少?最小负数是多少?
答:
37、设计算机A有60条指令,指令操作码为6位固定长度编码,从000000到111011。其后继产品B需要增加32条指令,并与A保持兼容。
(1)试采用操作码扩展技术为计算机B设计指令操作码。
(2)计算操作码的平均长度。
答: (1)在原先6位中操作码中还剩下4条指令:111100、111101、111110、111111,远远不够。所以要增加32条指令就必须增加3位扩展码。为了保持兼容,增加的操作码就从111100000到111111111。
(2)操作码的平均长度=长度*概率,所以这道题目的平均长度=(60*6+32*9)/(60+32) =7.043
38、已知X=2010×0.11011011,Y=2100×(-0.10101100),求X+Y。
答:为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为:
[ X ]浮 = 00010 , 0.11011011
[ Y ]浮 = 00100 , 1.01010000
(1)求阶差并对阶:
ΔE = Ex – Ey = [ Ex]补 + [ - Ey]补 = 00010 + 11100 = 11110
即ΔE为 –2,x的阶码小,应使Mx 右移2位,Ex加2,
[ X ]浮 = 00010 , 0.11011011 (11)
其中(11)表示Mx 右移2位后移出的最低两位数。
(2)尾数和
- 0 0 1 1 0 1 1 0 (11)
- 0 1 0 1 0 1 0 0
- 1 0 0 0 1 0 1 0 (11)
(3)规格化处理
尾数运算结果的符号位与最高数值位为同值,应执行左规处理,结果为1.00010101 (10),阶码为00 011 。
(4)舍入处理
采用0舍1入法处理,则有
- 0 0 0 1 0 1 0 1
+ 1
- 0 0 0 1 0 1 1 0
(5)判溢出
阶码符号位为00 ,不溢出,故得最终结果为
x + y = 2011× (-0.11101010)
39、假设机器字长16位,主存容量为128K字节,指令字长度为16位或32位,共有128条指令,设计计算机指令格式,要求有直接、立即数、相对、基值、间接、变址六种寻址方式。
答:由已知条件,机器字长16位,主存容量128KB / 16b= 64K字,因此MAR = 16位,共128条指令,故OP字段占7位。采用单字长和双字长两种指令格式,其中单字长指令用于算术逻辑和I / O类指令,双字长用于访问主存的指令。
寻址方式由寻址模式X定义如下:
X = 000 直接寻址 E = D(64K)
X = 001 立即数 D = 操作数
X = 010 相对寻址 E = PC + D PC = 16位
X = 011 基值寻址 E = Rb + D ,Rb =16 位
X = 100 间接寻址 E = (D)
X = 101 变址寻址 E = RX + D ,RX = 16位
40、设CPU有16根地址线,8根数据线,用MREQ作访存控制信号,用W/R作读/写控制信号。自选各类芯片,画出CPU与存储芯片的连接图。
要求:(1)最小8K地址为系统程序区,与其相邻的16K地址为用户程序区,最大4K地址空间为系统程序工作区。
(2)写出每片存储芯片的类型和地址范围(用十六进制表示)。
(3)用138译码器或其他门电路画出存储芯片的片选逻辑。
答:(1)写地址范围
(2)根据地址范围的容量及其在计算机系统中的作用,确定最小8K系统程序区选一片8K ×8位ROM;与其相邻的16K用户程序区选2片8K ×8位RAM;最大4K系统程序区选1片4K ×8位RAM。
(3)分配CPU地址线
(4)形成片选信号