这样,采用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位,操作码只有两位,设计格式如下:
2位 操作码OP 2位 源寄存器R1 3位 目的寄存器R2 3条指令的操作码分别为00,01,10
设计16位字长的寄存器-存储器型变址寻址方式指令如下:
4位 操作码OP 3位 通用寄存器 1位 变址寄存器 8位 偏移地址 4条指令的操作码分别为1100, 1101,1110,1111 6、解答:
(1) 首先,可以根据指令地址的数量来决定各种指令在指令空间上的分布:
如果按照从小到大的顺序分配操作码,并且按照指令数值从小到大的顺序,分别为双地址指令、单地址指令和零地址指令。
其次可以根据指令的条数来大致的估计操作码的长度:
双指令15条,需要4位指令来区分,剩下的12位指令平均分给单地址和零地址指令,每种指令可以用6位指令来区分,这样,各指令的条数为: 双地址指令15条,地址码:0000~1110;
单地址指令26-1=63条,地址码:1111 000000~1111 111110;
零地址指令64条,地址码:1111 111111 000000~1111 111111 111111。 (2) 与上面的分析相同,可以得出答案: 双地址指令14条,地址码:0000~1101;
单地址指令26*2-2 = 126条,1110 000000~1110 111110,1111 000000~1111 111110; 零地址指令128条1110 111111.000000~1110 111111.111111,1111 7、解答: (1) 变址寻址方式 (2) 间接寻址方式 (3) 变址寻址方式 8、解答:
X处理机程序占用的存储空间总和为:Y处理机程序占用的存储空间总和为:
, ,
Y处理机与X处理机的程序占用存储空间的比值:
当R>3时,有
,即对于同样的程序,在Y处理机中所占用的存储空间比在X处理机中所占用的
存储空间要小。在实际应用中经常是R>10,所以带标志符的处理机所占用的存储空间通常要小。 9、解答:
(1)根据表示数精度的要求:
根据表示数范围的要求:
取p=64, q=14 1位 符号 1位 阶符 14位 阶码 -64
64位 尾数 (2)能够表示的最大正数:(1-2能够表示的最大负数:-2表示数的精度:2
-64
-16385
)216383,
,
。
(3)采用的舍入方法为恒置法,
舍入规则:在规格化之后,尾数的最低位置为1, 在正数区的误差范围:-2在正数区的积累误差:+210、解答:
(1) 计算CPU时间为:对原来的指令:
-64-64
(1-2g)~+2
-
-64
,
。
对修改后的指令序列:
在等式(2)中,CPI new = CPI old,指令数。
要使去掉一些load操作,使得修改指令后的性能和原来的性能相同,必须满足:
,R为新的指令设计方案中比原来的方案中减少的
又已知load指令占总指令的22.8%
即要达到原来的性能,39.5%的load指令必须去掉。 ((2) 给出下面的两条指令: ld r1, 0(r1) add r1, r1, r1
在上面的指令中,我们将题目中的寄存器r2和rb用寄存器r1来代替。如果假定r1的值为47,指令执行前内存中地址为47的位置存放了整数4,那么上面指令序列执行后r1存放的值将变为8。 然而,如果我们使用了寄存器-存储器模式后,上面的指令序列成为: add r1, 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和IC new分别表示未采用新的寻址模式和采用新的寻址模式所执行的指令数。
(2) 为比较哪一种机器更快一些,需要考虑CPU时间。计算CPU的时间的公式为:
由(1)可知,采用新寻址模式的机器执行的指令数占未采用新的寻址模式机器执行指令数的96.5%,又因为要支持新的寻址模式,时钟周期增长5%
由此我们可以看出,尽管未采用新寻址模式的机器比采用新寻址模式的机器执行的指令数多,但由于时钟周期的影响,采用了新的寻址模式的机器比未采用的机器实际上慢了1-98.7%=1.3%。