第2章 课后习题
1、尾数用补码、小数表示,阶码用移码、整数表示,尾数字长p=6(不包括符号位),阶码字长q=6(不包括符号位),为数基值rm=16,阶码基值re=2。对于规格化浮点数,用十进制表达式写出如下数据(对于前11项,还要写出16进值编码)。 (1)最大尾数 (8)最小正数 (2)最小正尾数 (9)最大负数 (3)最小尾数 (10)最小负数 (4)最大负尾数 (11)浮点零 (5)最大阶码 (12)表数精度 (6)最小阶码 (13)表数效率
(7)最大正数 (14)能表示的规格化浮点数个数
2.一台计算机系统要求浮点数的精度不低于10-7.2,表数范围正数不小于1038,且正、负数对称。尾数用原码、纯小数表示,阶码用移码、整数表示。 (1) 设计这种浮点数的格式
(2) 计算(1)所设计浮点数格式实际上能够表示的最大正数、最大负数、表数精度和表数效率。
3.某处理机要求浮点数在正数区的积累误差不大于2-p-1 ,其中,p是浮点数的尾数长度。
(1) 选择合适的舍入方法。 (2) 确定警戒位位数。 (3) 计算在正数区的误差范围。
4.假设有A和B两种不同类型的处理机,A处理机中的数据不带标志符,其指令字长和数据字长均为32位。B处理机的数据带有标志符,每个数据的字长增加至36位,其中有4位是标志符,它的指令数由最多256条减少到不到64条。如果每执行一条指令平均要访问两个操作数,每个存放在存储器中的操作数平均要被访问8次。对于一个由1000条指令组成的程序,分别计算这个程序在A处理机和B处理机中所占用的存储空间大小(包括指令和数据),从中得到什么启发?
5.一台模型机共有7条指令,各指令的使用频率分别为35%,25%,20%,10%,5%,3%和2%,有8个通用数据寄存器,2个变址寄存器。
(1) 要求操作码的平均长度最短,请设计操作码的编码,并计算所设计操作码的平均长度。 (2) 设计8字长的寄存器-寄存器型指令3条,16位字长的寄存器-存储器型变址寻址方式指令4条,变址范围不小于±127。请设计指令格式,并给出各字段的长度和操作码的编码。
6.某处理机的指令字长为16位,有双地址指令、单地址指令和零地址指令3类,并假设每个地址字
1 / 10
段的长度均为6位。
(1) 如果双地址指令有15条,单地址指令和零地址指令的条数基本相同,问单地址指令和零地址指令各有多少条?并且为这3类指令分配操作码。
(2) 如果要求3类指令的比例大致为1:9:9,问双地址指令、单地址指令和零地址指令各有多少条?并且为这3类指令分配操作码。
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.有研究人员指出,如果在采用通用寄存器结构的计算机里加入寄存器-存储器寻址方式可能提高计算机效率。做法是用: ADD R2, 0(Rb) 代替指令序列 LOAD R1, 0(Rb) ADD R2, R2, R1
假定使用新的指令能使时钟周期增加10%,并且假定只对时钟产生影响,而不影响CPI那么: (1) 采用新的指令,要达到与原来同样的性能需要去掉的load操作所占的百分比?(假定load指令占总指令的22.8%)
(2) 举出一种多指令序列,该序列不能使用上述的寄存器-存储器寻址方式。即使得load R1后面紧接着执行对R1的操作(该操作可以是任意某一操作码),但这一指令序列不能被一条指令(假定存在
2 / 10
这条指令)代替。
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位长的带符号的偏移量来得到有效地址。这样,编译器就会用新的寻址模式来代替 ADD R1, R1, R2
LW Rd, 0(R1) (或是Store指令)
如果已知在DLX结构的计算机上对测得一些程序的load和store指令分别平均占26%和9%,在此基础上,计算:
(1) 假定10%的load和store指令可以用新的寻址模式代替,那么采用新的寻址模式后的指令计数与采用前之比为多少?
(2) 如果新的寻址模式使得时钟周期增长5%,那么采用了新的寻址模式的机器和未采用新的寻址模式的机器相比,哪种机器会更快一些,快多少?
3 / 10