计算机体系结构习题含答案Word文档下载推荐.docx
《计算机体系结构习题含答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机体系结构习题含答案Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
127。
请设计指令格式,并给出各字段的长度和操作码的编码。
6.某处理机的指令字长为16位,有双地址指令、单地址指令和零地址指令3类,并假设每个地址字段的长度均为6位。
(1)如果双地址指令有15条,单地址指令和零地址指令的条数基本相同,问单地址指令和零地址指令各有多少条?
并且为这3类指令分配操作码。
(2)如果要求3类指令的比例大致为1:
9:
9,问双地址指令、单地址指令和零地址指令各有多少条?
7.别用变址寻址方式和间接寻址方式编写一个程序,求C=A+B,其中,A与B都是由n个元素组成的一维数组。
比较两个程序,并回答下列问题:
(1)从程序的复杂程度看,哪一种寻址方式更好?
(2)从硬件实现的代价看,哪一种寻址方式比较容易实现?
(3)从对向量运算的支持看,哪一种寻址方式更好?
8.假设X处理机的数据不带标志符,其指令字长和数据字长均为32位。
Y处理机的数据带有标志符,每个数据的字长增加至35位,其中有3位是标志符,其指令字长由32位减少至30位。
并假设一条指令平均访问两个操作数,每个操作数平均被访问R次。
现有一个程序,它的指令条数为I,分别计算在这两种不同类型的处理机中程序所占用的存储空间,并加以比较。
9.一种浮点数表示方式的精度不低于10-19,能表示的最大正数不小于104000,而且正负数对称。
尾数用原码、小数表示,阶码用移码、整数表示,尾数和阶码的基值都是2。
(1)设计这种浮点数的格式,给出各字段的名称和长度。
(2)计算
(1)所设计的浮点数格式能够表示的最大正数、最大负数和表示数的精度。
(3)如果在运算器中没有设置硬件警戒位,则这种浮点数可能采用了哪一种舍入方法?
给出这种舍入方法的舍入规则,在正数区的误差范围和积累误差。
10.有研究人员指出,如果在采用通用寄存器结构的计算机里加入寄存器-存储器寻址方式可能提高计算机效率。
做法是用:
ADDR2,0(Rb)
代替指令序列
LOADR1,0(Rb)
ADDR2,R2,R1
假定使用新的指令能使时钟周期增加10%,并且假定只对时钟产生影响,而不影响CPI那么:
(1)采用新的指令,要达到与原来同样的性能需要去掉的load操作所占的百分比?
(假定load指令占总指令的22.8%)
(2)举出一种多指令序列,该序列不能使用上述的寄存器-存储器寻址方式。
即使得loadR1后面紧接着执行对R1的操作(该操作可以是任意某一操作码),但这一指令序列不能被一条指令(假定存在这条指令)代替。
11.试比较下面4种不同类型的指令结构的存储效率:
(1)累加型:
所有的操作都在单个寄存器和单个内存地址之间进行
(2)存储器-存储器型:
每个指令的3个操作数都在内存中进行
(3)堆栈型:
所有的操作都在栈顶进行。
只有push和pop操作会访问内存,其它的指令执行时都会删除栈中的操作数,然后写入执行结果。
(4)通用寄存器型:
所有的操作都在寄存器中进行。
这些寄存器-寄存器指令中的每个指令都包含3个操作数。
通用寄存器一共有16个,寄存器标志符占4位长。
为比较存储效率,我们对以上4种指令集作了如下约定:
操作码占一个字节(8位)
内存地址占2个字节(16位)
操作数占4字节(32位)
所有指令的长度都以整数个字节计算
另外,还假定访问内存不使用其它的优化措施,变量A、B、C和D的初值都已经放在内存中。
针对以上4种不同的指令系统,回答下列问题:
(1)分别用汇编指令写出下面3个赋值语句:
A=B+C;
B=A+C;
D=A–B;
(2)分别计算所执行指令的字节数和转移内存数据的字节数,并指出如果根据代码的大小来计算的话,哪种结构的效率是最高的?
如果按需要的总内存带宽(代码+数据)来计算,又是哪种结构的效率最高?
12.考虑为DLX结构的计算机增加一个新的寻址模式。
即使得地址模式增加两个寄存器和一个11位长的带符号的偏移量来得到有效地址。
这样,编译器就会用新的寻址模式来代替
ADDR1,R1,R2
LWRd,0(R1)(或是Store指令)
如果已知在DLX结构的计算机上对测得一些程序的load和store指令分别平均占26%和9%,在此基础上,计算:
(1)假定10%的load和store指令可以用新的寻址模式代替,那么采用新的寻址模式后的指令计数与采用前之比为多少?
(2)如果新的寻址模式使得时钟周期增长5%,那么采用了新的寻址模式的机器和未采用新的寻址模式的机器相比,哪种机器会更快一些,快多少?
窗体底端
1、解答:
在尾数采用补码、小数表示且p=6,阶码采用移码、整数表示且q=6,尾数基rm为16,阶码基re为2的情况下:
(1)最大尾数为:
1-rm-p=1-16-6,0.FFFFFF
(2)最小正尾数为:
1/rm=1/16,0.100000
(3)最小尾数为:
-1,1.000000
(4)最大负尾数为:
-(rm-1+rm-p)=(16-1+16-6),1.EFFFFF
(5)最大阶码为:
req-1=26-1=63,7F,包括符号位共7个1
(6)最小阶码为:
-req=-26=-64,00,包括符号位共7个0
(7)最大正数为:
(1-16-6)1663,7FFFFFFF
(8)最小正数为:
16-65,00100000
(9)最大负数为:
-(16-1+16-6)16-64,80EFFFFF
(10)最小负数为:
-1663,FF000000
(11)浮点零为:
00000000
(12)表数精度为:
16-5/2=2-21
(13)表数效率为:
15/16=93.75%
(14)能表示的规格化浮点数个数为:
2×
15×
165×
27+1
2、解答:
(1)取尾数和阶码的基都为2,即:
rm=2且re=2
根据表示数精度的要求:
于是可以取p=24;
根据表示数范围的要求:
即
因此可以取q=7
数据格式可以表示如下(尾数采用隐藏位):
1位
7位
23位
符号
阶符
阶码
尾数
(2)能够表示的最大正数:
(1-2-24)2127,
能够表示的最大负数:
-2-129,
表示数的精度:
2-24,
表数效率:
100%。
3、解答:
(1)舍入方法:
下舍上入法、查表法
(2)警戒位位数:
2位
(3)正数区的误差范围:
-2-p-1(1-2-g+1)~2-p-1
4、解答:
我们可以计算出数据的大致数量:
1000条指令访问的数据总数为1000*2=2000个;
每个数据平均访问8次,所以,不同的数据个数为:
2000÷
8=250个
对于A处理机,所用的存储空间的大小为:
Mem_size=Meminstruction+Memdata=1000×
32+250×
32=40000bit
对于B处理机,指令字长由32位变为了30位(条数由256减少到64),这样,所用的存储空间的大小为:
36=39000bit
由此我们可以看出,由于数据的平均访问次数要大于指令,所以,通过改进数据的格式来减少指令的长度,可以减少总的存储空间大小。
5、解答:
(1)要使得到的操作码长度最短,应采用Huffman编码,构造Huffman树如下:
由此可以得到7条指令的编码分别如下:
这样,采用Huffman编码法得到的操作码的平均长度为:
H=2×
(0.35+0.25+0.20)+3×
0.10+4×
0.05+5×
(0.03+0.02)
=1.6+0.3+0.2+0.25
=2.35
(2)设计8位字长的寄存器-寄存器型变址寻址方式指令如下:
因为只有8个通用寄存器,所以寄存器地址需3位,操作码只有两位,设计格式如下:
3位
操作码OP
源寄存器R1
目的寄存器R2
3条指令的操作码分别为00,01,10
设计16位字长的寄存器-存储器型变址寻址方式指令如下:
4位
8位
通用寄存器
变址寄存器
偏移地址
4条指令的操作码分别为1100,1101,1110,1111
6、解答:
(1)首先,可以根据指令地址的数量来决定各种指令在指令空间上的分布:
如果按照从小到大的顺序分配操作码,并且按照指令数值从小到大的顺序,分别为双地址指令、单地址指令和零地址指令。
其次可以根据指令的条数来大致的估计操作码的长度:
双指令15条,需要4位指令来区分,剩下的12位指令平均分给单地址和零地址指令,每种指令可以用6位指令来区分,这样,各指令的条数为:
双地址指令15条,地址码:
0000~1110;
单地址指令26-1=63条,地址码:
1111000000~1111111110;
零地址指令64条,地址码:
1111111111000000~1111111111111111。
(2)与上面的分析相同,可以得出答案:
双地址指令14条,地址码:
0000~1101;
单地址指令26*2-2=126条,1110000000~1110111110,1111000000~1111111110;
零地址指令128条1110111111.000000~1110111111.111111,1111
7、解答:
(1)变址寻址方式
(2)间接寻址方式
(3)变址寻址方式
8、解答:
X处理机程序占用的存储空间总和为:
,
Y处理机程序占用的存储空间总和为:
Y处理机与X处理机的程序占用存储空间的比值:
当R>3时,有
,即对于同样的程序,在Y处理机中所占用的存储空间比在X处理机中所占用的存储空间要小。
在实际应用中经常是R>10,所以带标志符的处理机所占用的存储空间通常要小。
9、解答:
(1)根据表示数精度的要求:
取p=64,q=14
14位
64位
(1-2-64)216383,
-2-16385,
2-64。
(3)采用的舍入方法为恒置法,
舍入规则:
在规格化之后,尾数的最低位置为1,
在正数区的误差范围:
-2-64(1-2-g)~+2-64,
在正数区的积累误差:
+2-64。
10、解答:
(1)计算CPU时间为:
对原来的指令:
对修改后的指令序列:
在等式
(2)中,CPInew=CPIold,
,R为新的指令设计方案中比原来的方案中减少的指令数。
要使去掉一些load操作,使得修改指令后的性能和原来的性能相同,必须满足:
又已知load指令占总指令的22.8%
即要达到原来的性能,39.5%的load指令必须去掉。
(
(2)给出下面的两条指令:
ldr1,0(r1)
addr1,r1,r1
在上面的指令中,我们将题目中的寄存器r2和rb用寄存器r1来代替。
如果假定r1的值为47,指令执行前内存中地址为47的位置存放了整数4,那么上面指令序列执行后r1存放的值将变为8。
然而,如果我们使用了寄存器-存储器模式后,上面的指令序列成为:
addr1,0(r1)
假设寄存器和内存初值相同的话,指令执行结束后,寄存器的值将变为51(r1+MEM[0+r1]即47+4)。
所以,在这种情况下,不能做指令替换。
11、解答:
一台采用累加型指令集结构计算机实现的程序段如下:
在上面的代码中,loada,storea和adda每个都是24位长(操作码8位,操作数地址16位),negatea指令只需8位,所以整个代码一共需要22个字节。
对存取数据操作来说,每条指令访问操作数的值需要访问4字节数据,所以,整个程序需要在内存和CPU之间转移28字节的数据。
一台采用存储器-存储器型指令集结构计算机实现的程序段如下:
在上面的代码中,每个指令为56位长(操作码8位,3个操作数48位),这样程序需要21个字节。
对存取数据操作来说,每条指令执行3个各访问4字节数据的操作,这样,整个程序在内存和CPU之间共转移36字节的数据。
一台采用堆栈型指令集结构计算机实现的程序段如下:
上面的代码中,每条load和store指令都为28位长(操作码8位,地址16位,寄存器4位),每条add和sub指令都为20位长(操作码8位,3个寄存器12位),所以整个代码一共需要29个字节存储。
对存取数据操作来说,每条load和store指令访问操作数的值需要访问4字节数据,所以整个程序在内存和CPU之间共转移20字节的数据。
根据上面的讨论,可以得到如下表格:
由上图我们可以看出采用不同的结构指令带宽和数据带宽之间的关系。
其中采用存储器-存储器型指令集结构的指令带宽较小,但数据带宽较大,而采用通用寄存器指令集结构正好相反。
根据写出的代码,从总的指令和数据带宽的角度来看,采用通用寄存器指令集结构的计算机是效率最高的,其次是采用累加型指令集结构的计算机。
12、解答:
(1)设IC为指令条数,ICclassic和ICnew分别表示未采用新的寻址模式和采用新的寻址模式所执行的指令数。
(2)为比较哪一种机器更快一些,需要考虑CPU时间。
计算CPU的时间的公式为:
由
(1)可知,采用新寻址模式的机器执行的指令数占未采用新的寻址模式机器执行指令数的96.5%,又因为要支持新的寻址模式,时钟周期增长5%
由此我们可以看出,尽管未采用新寻址模式的机器比采用新寻址模式的机器执行的指令数多,但由于时钟周期的影响,采用了新的寻址模式的机器比未采用的机器实际上慢了1-98.7%=1.3%。