计算机组成与系统结构课后答案全清华大学出版社袁春风主编

8 return result; 9 }

参考答案:

参数len的类型是unsigned,所以,当len=0时,执行len-1的结果为11…1,是最大可表示的无符号数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储器访问异常。

只要将len声明为int型,或循环的测试条件改为i

10. 设某浮点数格式为:

数符 1位 阶码 尾数 6位补码 5位移码 其中,移码的偏置常数为16,补码采用一位符号位,基数为4。

(1) 用这种格式表示下列十进制数:+1.7,–0.12,+19,–1/8。

(2) 写出该格式浮点数的表示范围,并与12位定点补码整数表示范围比较。 参考答案:(假定采用0舍1入法进行舍入)

(1) +1.7 = +1.1011001B = 0.011011B× 41, 故阶码为1 +16 = 17 = 10001B, 尾数为+0.011011的补码,

即0.011011,所以+1.7表示为0 10001 011011。

–0.12 = – 0.000111101B = – 0.011111B × 4–1, 故阶码为 –1 + 16 =15 = 01111B, 尾数为– 0.011111的补码,即1.100001, 所以–0.12表示为1 01111 100001。

+19 = +10011B = 0.010011B× 43,故阶码为3 + 16 = 19 = 10011B, 尾数为0.010011,所以+19表示为0 10011 010011。

–1/8 = – 0.125 = – 0.001B = – 0.100000 × 4–1,阶码为 –1 + 16 = 15 = 01111B,尾数为– 0.100000的补码,即1.100000,所以–1/8表示为1 01111 100000。 (2)该格式浮点数表示的范围如下。

正数最大值:0.111111B × 411111,即:0.333× 415 (≈230 ≈109) 正数最小值:0.000001B × 400000,即:0.001× 4–16 (≈2–34≈10–10) 负数最大值:–0.000001B × 400000,即:–0.001× 4–16 负数最小值:–1.000000B × 411111,即:–1.000× 415

12位定点补码整数的表示范围为:–211~+(211–1),即:–2048~2047 由此可见,定点数和浮点数的表示范围相差非常大。

11. 下列几种情况所能表示的数的范围是什么?

(1) 16位无符号整数 (2) 16位原码定点小数 (3) 16位补码定点小数 (4) 16位补码定点整数

(5) 下述格式的浮点数(基数为2,移码的偏置常数为128)

数符 1位

阶码 8位移码

尾数 7位原码

因此,该格式浮点数的数量级在10–10~109之间。

参考答案:

(1)无符号整数:0~216–1。

(2)原码定点小数:–(1–2–15) ~ + (1–2–15)。 (3)补码定点小数:–1 ~ + (1–2–15)。 (4)补码定点整数:–32768 ~ +32767。 (5)浮点数:负数:– (1–2–7)×2+127 ~ –2–7×2–128。

正数:+2–135 ~ (1–2–7) ×2+127。

12. 以IEEE 754单精度浮点数格式表示下列十进制数。

+1.75,+19,–1/8,258 参考答案:

+1.75 = +1.11B = 1.11B × 20, 故阶码为0+127=01111111B, 数符为0,尾数为1.110…0,小数点前为隐藏位,所以+1.7表示为0 01111111 110 0000 0000 0000 0000 0000,用十六进制表示为3FE00000H。 +19 = +10011B = +1.0011B × 24…

–1/8 = – 0.125 = – 0.001B = – 1.0 × 2–3,阶码为–3+127 = 01111100B,数符为1,尾数为1.0…0,所以–1/8表示为1 01111100 000 0000 0000 0000 0000 0000,用十六进制表示为BE000000H。 × 28

13.设一个变量的值为4098,要求分别用32位补码整数和IEEE 754单精度浮点格式表示该变量(结果用

十六进制表示),并说明哪段二进制序列在两种表示中完全相同,为什么会相同? 参考答案:

4098 = +1 0000 0000 0010B = +1. 0000 0000 001 × 212

32位2-补码形式为:0000 0000 0000 0000 0001 0000 0000 0010 (00001002H) 0000 0000 0010

粗体部分为除隐藏位外的有效数字,因此,在两种表示中是相同的序列。

参考答案:

––111 1111 1111 1111 1111 1111 1111 1111B

= –1.11 1111 1111 1111 1111 1111 1111 1111 × 230

32位2-补码形式能表示精确的值,而浮点数表示的是近似值,低位被截断

15.下表给出了有关IEEE 754浮点格式表示中一些重要数据的取值,表中已经有最大规格化数的相应内

容,要求填入其他浮点数的相应内容。(注:表中a代表一个在1到10之间的正纯小数)

单精度 项目 阶码 尾数 以2的幂次表示的值 0 1 最大规格化数 最小规格化数 最大非规格化数 最小非规格化数 +∞ NaN 00000000 01111111 00000001 00000000 00000000 0….00 0….00 1…11 0….00 1…11 0…01 0….00 非全0 0 1 (2–2–23)×2127 1.0×2–126 (1–2–23)×2–126 2–23×2–126=2–149 – – 以10的幂次表示的值 0 1 a×1038 a×10–38 a×10–38 a×10–44 – – 双精度 以2的幂次表示的值 0 1 (2–2–52)×21023 1.0×2–1022 (1–2–52)×2–1022 2–52×2–1022 – – 以10的幂次表示的值 0 1 a×10308 a×10–308 a×10–308 a×10– – – 16.已知下列字符编码:A=100 0001,a=110 0001,0=011 0000,求E、e、f、7、G、Z、5的7位ACSII

码和第一位前加入奇校验位后的8位编码。 参考答案:

E的ASCII码为 ‘A’ + (‘E’ – ‘A’) = 100 0001 + 100 = 100 0101, 奇校验位P = 0,第一位前加入奇校验位后的8位编码是0 100 0101。

e的ASCII码为‘a’+ (‘e’ – ‘a’) = 110 0001 + 100 = 110 0101, 奇校验位P = 1, 第一位前加入奇校验位后的8位编码是1 110 0101。

f的ASCII码为‘a’+ (‘f’ – ‘a’) = 110 0001 + 101 = 110 0110, 奇校验位P = 1, 第一位前 加入奇校验位后的8位编码是 1 110 0110。

7的ASCII码为‘0’+ (7 - 0) = 011 0000 + 111 = 011 0111,奇校验位P = 0, 第一位前加入奇校验位后的8位编码是0 011 0111。

G的ASCII码为‘A’+ (‘G’ – ‘A’) = 100 0001 + 0110 = 100 0111, 奇校验位P = 1, 第一位前加入奇校验位后的8位编码是1 100 0111。

Z的ASCII码为‘A’+(‘Z’ – ‘A’) = 100 0001 + 11001 = 101 1010, 奇校验位P = 1, 第一位前加入奇校验位后的8位编码是 1 101 1010。

5的ASCII码为‘0’+(5 – 0) = 011 0000 + 101 = 011 0101, 奇校验位P = 1, 第一位前加入奇校验位后的8位编码是 1 011 0101。

17.假定在一个程序中定义了变量x、y和i,其中,x和y是float型变量(用IEEE754单精度浮点数表示),

i是16位short型变量(用补码表示)。程序执行到某一时刻,x = –0.125、y=7.5、i=100,它们都被写到了主存(按字节编址),其地址分别是100,108和112。请分别画出在大端机器和小端机器上变量x、y和i在内存的存放位置。 参考答案:

–0.125 = –0.001B = –1.0 × 2-3

x在机器内部的机器数为:1 01111100 00…0 (BE00 0000H) 7.5= +111.1B= +1.111 × 22 …0 (40F0 0000H) 100=64+32+4=1100100B

i在机器内部表示的机器数为:0000 0000 0110 0100(0064H)

大端机

地址 内容 100

101 102 103 108 109 110 111 112 113

00H 00H 00H 40H F0H 00H 00H 00H 64H

BEH

小端机 内容

00H 00H 00H BEH 00H F0H 40H 64H 00H

00H

18.假定某计算机的总线采用奇校验,每8位数据有一位校验位,若在32位数据线上传输的信息是8F 3C

AB 96H,则对应的4个校验位应为什么?若接受方收到的数据信息和校验位分别为87 3C AB 96H和0101B,则说明发生了什么情况,并给出验证过程。 参考答案:

传输信息8F 3C AB 96H展开为1000 1111 0011 1100 1010 1011 1001 0110,每8位有一个奇校验位,因

此,总线上发送方送出的4个校验位应该分别为0、1、0、1。

接受方的数据信息为87 3C AB 96H,展开后为1000 0111 0011 1100 1010 1011 1001 0110;接收到的校

验位分别为0、1、0、1。在接受方进行校验判断如下:

根据接收到的数据信息计算出4个奇校验位分别为1、1、0、1,将该4位校验位分别和接收到的4位

校验位进行异或,得到1、0、0、0,说明数据信息的第一个字节发生传输错误。对照传输前、后的数据信息,第一字节8FH变成了87H,说明确实发生了传输错误,验证正确。

19.写出16位数据的SEC码。假定数据为0101 0001 0100 0110,说明SEC码如何正确检测数据位5的错

误。

参考答案:

对于16位数据, 可以如下插入校验位:

M16 M15 M14 M13 M12 P5 M11 M10 M9 M8 M7 M6 M5 P4 M4 M3 M2 P3 M1 P2 P1

其中Mi是原信息数据, Pi是加入的校验位, 对于各个校验位的值可以如下计算 P1 = M1⊕M2⊕M3⊕M4⊕M5⊕M7⊕M9⊕M11⊕M12⊕M14⊕M16 = 1 P2 = M1⊕M3⊕M4⊕M6⊕M7⊕M10⊕M11⊕M13⊕M14 = 1

P3 = M2⊕M3⊕M4⊕M8⊕M9⊕M10⊕M11⊕M15⊕M16 = 0 P4 = M5⊕M6⊕M7⊕M8⊕M9⊕M10⊕M11 = 0 P5 = M12⊕M13⊕M14⊕M15⊕M16 = 0

所以此时P5 P4 P3 P2 P1 = 00011,第五位数据出错时,数据字变为:0101 0001 0101 0110,P5’P4’P3’P2’P1’= 01010,故障字 = 00011⊕01010 = 01001,说明码字第9位出错,即M5出错。

20.假设要传送的数据信息为:100011,若约定的生成多项式为:G(x)= x3+1,则校验码为多少?假定在

接收端接收到的数据信息为100010,说明如何正确检测其错误,写出检测过程。 参考答案:

原数据信息为100011,对应的报文多项式为M(x) = x5 + x + 1, 生成多项式的位数为4位, 所以在原数据信息后面添加3个0,变为M’(x) = x3M(x) = x8 + x4 + x3, 用M(x)去模2除G(x),得到的余数为111, 所以得到CRC码为100011 111。

检测时, 用接收到的CRC码去模2除生成多项式1001,若得到的余数为0,则表明正确,否则说明传输时发生了错误。此题中接收到的CRC码为100010 111(即数据100010加检验位111),显然,用100010 111 模2除 1001,得到余数为001,不为0,说明传输时发生错误。

第 3 章 习 题 答 案

2(4)高级语言中的运算和机器语言(即指令)中的运算是什么关系?假定某一个高级语言源程序P中有乘、除运算,但机器M中不提供乘、除运算指令,则程序P能否在机器M上运行?为什么? 参考答案:(略)

3.考虑以下C语言程序代码:

int func1(unsigned word) { return (int) (( word <<24) >> 24); }

int func2(unsigned word) { return ( (int) word <<24 ) >> 24; }

假设在一个32位机器上执行这些函数,该机器使用二进制补码表示带符号整数。无符号数采用逻辑移位,带符号整数采用算术移位。请填写下表,并说明函数func1和func2的功能。 W 机器数 0000 007FH 0000 0080H 0000 00FFH 0000 0100H 值 127 128 255 256 func1(w) 机器数 0000 007FH 0000 0080H 0000 00FFH 0000 0000H 值 +127 +128 +255 0 func2(w) 机器数 0000 007FH FFFF FF80H FFFF FFFFH 0000 0000H 值 +127 –128 –1 0 函数func1的功能是把无符号数高24位清零(左移24位再逻辑右移24位),结果一定是正的有符号数;而函数func2的功能是把无符号数的高24位都变成和第25位一样,因为左移24位后进行算术右移,高24位补符号位(即第25位)。

4.填写下表,注意对比无符号数和带符号整数的乘法结果,以及截断操作前、后的结果。 模式 无符号数 二进制补码 无符号数 x 机器数 110 110 001 值 6 –2 1 机器数 010 010 111 y 值 2 +2 7 x×y(截断前) 机器数 001100 111100 000111 值 12 –4 7 x×y(截断后) 机器数 100 100 111 值 4 –4 7

联系客服:779662525#qq.com(#替换为@)