logo资料库

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

第1页 / 共76页
第2页 / 共76页
第3页 / 共76页
第4页 / 共76页
第5页 / 共76页
第6页 / 共76页
第7页 / 共76页
第8页 / 共76页
资料共76页,剩余部分请下载后查看
第 1 章 习 题 答 案
第 二 章 习 题 答 案
P1 = M1⊕M2⊕M3⊕M4⊕M5⊕M7⊕M9⊕M11⊕M12⊕M14⊕M16 = 1
P3 = M2⊕M3⊕M4⊕M8⊕M9⊕M10⊕M11⊕M15⊕M16 = 0
第 3 章 习 题 答 案
第 4 章 习 题 答 案
第 5 章 习 题 答 案
“零”扩展(0- extend)“符号”扩展(Sign extend)
CPU总线(CPU Bus)寄存器堆(Register file)
ISA总线(Industrial Standard Architecture Bus)
EISA总线(Extended Industrial Standard Architecture B
PCI总线(Peripheral Component Interconnect Bus)
SCSI总线(Small Computer Standard Interface Bus)
= 10ms + 4.17ms + 0.1ms = 14.27ms
(a) 1200波特时,一个字符共占:1+8+1=10位
(b) 2400波特时,一个字符共占:1+8+2=11位
IO读指令和IO写指令
IO读控制信号,IO写控制信号。
第 1 章 习 题 答 案 5.若有两个基准测试程序 P1 和 P2 在机器 M1 和 M2 上运行,假定 M1 和 M2 的价格分别是 5000 元和 8000 元,下表给出了 P1 和 P2 在 M1 和 M2 上所花的时间和指令条数。 程序 P1 P2 指令条数 200×106 300×103 M1 执行时间(ms) 10000 3 指令条数 150×106 420×103 M2 执行时间(ms) 5000 6 请回答下列问题: (1) 对于 P1,哪台机器的速度快?快多少?对于 P2 呢? (2) 在 M1 上执行 P1 和 P2 的速度分别是多少 MIPS?在 M2 上的执行速度又各是多少?从执行速度 来看,对于 P2,哪台机器的速度快?快多少? (3) 假定 M1 和 M2 的时钟频率各是 800MHz 和 1.2GHz,则在 M1 和 M2 上执行 P1 时的平均时钟周 期数 CPI 各是多少? (4) 如果某个用户需要大量使用程序 P1,并且该用户主要关心系统的响应时间而不是吞吐率,那么, 该用户需要大批购进机器时,应该选择 M1 还是 M2?为什么?(提示:从性价比上考虑) (5) 如果另一个用户也需要购进大批机器,但该用户使用 P1 和 P2 一样多,主要关心的也是响应时 间,那么,应该选择 M1 还是 M2?为什么? 参考答案: (1) 对于 P1,M2 比 M1 快一倍;对于 P2,M1 比 M2 快一倍。 (2) 对于 M1,P1 的速度为:200M/10=20MIPS;P2 为 300k/0.003=100MIPS。 对于 M2,P1 的速度为:150M/5=30MIPS;P2 为 420k/0.006=70MIPS。 从执行速度来看,对于 P2,因为 100/70=1.43 倍,所以 M1 比 M2 快 0.43 倍。 (3) 在 M1 上执行 P1 时的平均时钟周期数 CPI 为:10×800M/(200×106)=40。 在 M2 上执行 P1 时的平均时钟周期数 CPI 为:5×1.2G/(150×106)=40。 (4) 考虑运行 P1 时 M1 和 M2 的性价比,因为该用户主要关心系统的响应时间,所以性价比中的性 能应考虑执行时间,其性能为执行时间的倒数。故性价比 R 为: R=1/(执行时间×价格) R 越大说明性价比越高,也即,“执行时间×价格”的值越小,则性价比越高。 因为 10×5000 > 5×8000,所以,M2 的性价比高。应选择 M2。 (5) P1 和 P2 需要同等考虑,性能有多种方式:执行时间总和、算术平均、几何平均。 若用算术平均方式,则:因为 (10+0.003)/2×5000 > (5+0.006)/2×8000,所以 M2 的性价比高,应 选择 M2。 若用几何平均方式,则:因为 sqrt(10×0.003) ×5000 < sqrt(5×0.006) ×8000,所以 M1 的性价比高, 应选择 M1。 6.若机器 M1 和 M2 具有相同的指令集,其时钟频率分别为 1GHz 和 1.5GHz。在指令集中有五种不同类 型的指令 A~E。下表给出了在 M1 和 M2 上每类指令的平均时钟周期数 CPI。 机器 M1 M2 A 1 2 B 2 2 C 2 4 D 3 5 E 4 6 请回答下列问题:
(1)M1 和 M2 的峰值 MIPS 各是多少? (2)假定某程序 P 的指令序列中,五类指令具有完全相同的指令条数,则程序 P 在 M1 和 M2 上运 行时,哪台机器更快?快多少?在 M1 和 M2 上执行程序 P 时的平均时钟周期数 CPI 各是多少? 参考答案: (1)M1 上可以选择一段都是 A 类指令组成的程序,其峰值 MIPS 为 1000MIPS。 M2 上可以选择一段 A 和 B 类指令组成的程序,其峰值 MIPS 为 1500/2=750MIPS。 (2)5 类指令具有完全相同的指令条数,所以各占 20%。 在 M1 和 M2 上执行程序 P 时的平均时钟周期数 CPI 分别为: M1:20%×(1+2+2+3+4)= 0.2×12 = 2.4 M2:20%×(2+2+4+5+6)= 0.2×19 = 3.8 假设程序 P 的指令条数为 N,则在 M1 和 M2 上的执行时间分别为: M1:2.4× N×1/1G = 2.4N (ns) M2:3.8×N×1/1.5G = 2.53 N (ns) M1 执行 P 的速度更快,每条指令平均快 0.13ns,也即 M1 比 M2 快 0.13/2.53×100%≈5%。 (思考:如果说程序 P 在 M1 上执行比 M2 上快 (3.8–2.4)/3.8×100%= 36.8%,那么,这个结论显然是 错误的。请问错在什么地方?) 7.假设同一套指令集用不同的方法设计了两种机器 M1 和 M2。机器 M1 的时钟周期为 0.8ns,机器 M2 的时钟周期为 1.2ns。某个程序 P 在机器 M1 上运行时的 CPI 为 4,在 M2 上的 CPI 为 2。对于程序 P 来说,哪台机器的执行速度更快?快多少? 参考答案: 假设程序 P 的指令条数为 N,则在 M1 和 M2 上的执行时间分别为: M1:4 N×0.8 = 3.2N (ns) M2:2 N×1.2 = 2.4 N (ns) 所以,M2 执行 P 的速度更快,每条指令平均快 0.8ns,比 M1 快 0.8/3.2×100%=25%。 8.假设某机器 M 的时钟频率为 4GHz,用户程序 P 在 M 上的指令条数为 8×109,其 CPI 为 1.25,则 P 在 M 上的执行时间是多少?若在机器 M 上从程序 P 开始启动到执行结束所需的时间是 4 秒,则 P 占用 的 CPU 时间的百分比是多少? 参考答案: 程序 P 在 M 上的执行时间为:1.25×8×109×1/4G = 2.5 s,从启动 P 执行开始到执行结束的总时间为 4 秒,其中 2.5 秒是 P 在 CPU 上真正的执行时间,其他时间可能执行操作系统程序或其他用户程序。 程序 P 占用的 CPU 时间的百分比为:2.5/4 = 62.5%。 9.假定某编译器对某段高级语言程序编译生成两种不同的指令序列 S1 和 S2,在时钟频率为 500MHz 的 机器 M 上运行,目标指令序列中用到的指令类型有 A、B、C 和 D 四类。四类指令在 M 上的 CPI 和 两个指令序列所用的各类指令条数如下表所示。 各指令的 CPI S1 的指令条数 S2 的指令条数 A 1 5 1 B 2 2 1 C 3 2 1 D 4 1 5 请问:S1 和 S2 各有多少条指令?CPI 各为多少?所含的时钟周期数各为多少?执行时间各为多少? 参考答案:
S1 有 10 条指令,CPI 为 (5×1+2×2+2×3+1×4)/10=1.9, 所含的时钟周期数为 10×1.9=19,执行时 间为 19/500M = 38ns。 S2 有 8 条指令,CPI 为 (1×1+1×2+1×3+5×4)/8 =3.25, 所含的时钟周期数为 8×3.25=26,执行时 间为 26/500M = 52ns。 (注:从上述结果来看,对于同一个高级语言源程序,在同一台机器上所生成的目标程序不同,其 执行时间可能不同,而且,并不是指令条数少的目标程序执行时间就一定少。) 10.假定机器 M 的时钟频率为 1.2GHz,某程序 P 在机器 M 上的执行时间为 12 秒钟。对 P 优化时,将其 所有的乘 4 指令都换成了一条左移 2 位的指令,得到优化后的程序 P’。已知在 M 上乘法指令的 CPI 为 5,左移指令的 CPI 为 2,P 的执行时间是 P’执行时间的 1.2 倍,则 P 中有多少条乘法指令被替换 成了左移指令被执行? 参考答案: 显然,P’的执行时间为 10 秒,因此,P 比 P’多花了 2 秒钟,因此,执行时被换成左移指令的乘 法指令的条数为 1.2G×2/(5–2) = 800M。 第 二 章 习 题 答 案 3.实现下列各数的转换。 (1) (25.8125)10= (?)2= (?) 8= (?) 16 (2) (101101.011)2 = (?)10= (?) 8= (?) 16= (?) 8421 (3) (0101 1001 0110.0011)8421 = (?)10= (?) 2= (?) 16 (4) (4E.C)16 = (?)10= (?) 2 参考答案: (1) (25.8125)10 = (1 1001.1101)2 = (31.64) 8 = (19.D) 16 (2)(101101.011)2 = (45.375)10 = (55.3) 8 = (2D.6) 16 = (0100 0101.0011 0111 0101) 8421 (3)(0101 1001 0110.0011)8421 = (596.3)10 = (1001010100.01001100110011…) 2 = (254.4CCC…) 16 (4)(4E.C)16 = (78.75)10 = (0100 1110.11) 2 4. 假定机器数为 8 位(1 位符号,7 位数值),写出下列各二进制数的原码和补码表示。 +0.1001,–0.1001,+1.0,–1.0,+0.010100,–0.010100,+0,–0 参考答案: +0.1001: –0.1001: +1.0: –1.0: +0.010100: –0.010100: +0: –0: 原码 0.1001000 1.1001000 溢出 溢出 0.0101000 1.0101000 0.0000000 1.0000000 补码 0.1001000 1.0111000 溢出 1.0000000 0.0101000 1.1011000 0.0000000 0.0000000 5. 假定机器数为 8 位(1 位符号,7 位数值),写出下列各二进制数的补码和移码表示。 +1001,–1001,+1,–1,+10100,–10100,+0,–0 参考答案:
+1001: –1001: +1: –1: +10100: –10100: +0: –0: 移码 10001001 01110111 10000001 011111111 10010100 01101100 10000000 10000000 补码 00001001 11110111 00000001 11111111 00010100 11101100 00000000 00000000 6. 已知 [x]补,求 x (1)[x]补=1.1100111 (3)[x]补=0.1010010 参考答案: (1)[x]补=1.1100111 (2)[x]补=10000000 (3)[x]补=0.1010010 (4)[x]补=11010011 (2)[x]补=10000000 (4)[x]补=11010011 x = –0.0011001B x = –10000000B = –128 x = +0.101001B x = – 101101B = – 45 7.假定一台 32 位字长的机器中带符号整数用补码表示,浮点数用 IEEE 754 标准表示,寄存器 R1 和 R2 的内容分别为 R1:0000108BH,R2:8080108BH。不同指令对寄存器进行不同的操作,因而,不同 指令执行时寄存器内容对应的真值不同。假定执行下列运算指令时,操作数为寄存器 R1 和 R2 的内 容,则 R1 和 R2 中操作数的真值分别为多少? (1) 无符号数加法指令 (2) 带符号整数乘法指令 (3) 单精度浮点数减法指令 参考答案: R1 = 0000108BH = 0000 0000 0000 0000 0001 0000 1000 1011b R2 = 8080108BH = 1000 0000 1000 0000 0001 0000 1000 1011b (1)对于无符号数加法指令,R1 和 R2 中是操作数的无符号数表示,因此,其真值分别为 R1:108BH, R2:8080108BH。 (2)对于带符号整数乘法指令,R1 和 R2 中是操作数的带符号整数补码表示,由最高位可知, R1 为正数, R2 为负数。R1 的真值为+108BH, R2 的真值为–(0111 1111 0111 1111 1110 1111 0111 0100b + 1b) = –7F7FEF75H。 (3)对于单精度浮点数减法指令,R1 和 R2 中是操作数的 IEEE754 单精度浮点数表示。在 IEEE 754 标准中,单精度浮点数的位数为 32 位,其中包含 1 位符号位,8 位阶码,23 位尾数。 由 R1 中的内容可知,其符号位为 0,表示其为正数,阶码为 0000 0000,尾数部分为 000 0000 0001 0000 1000 1011,故其为非规格化浮点数,指数为–126,尾数中没有隐藏的 1,用十六进制表示 尾数为+0.002116H,故 R1 表示的真值为+0.002116H × 10-126。 由 R2 中的内容可知,其符号位为 1,表示其为负数,阶码为 0000 0001,尾数部分为 000 0000 0001 0000 1000 1011,故其为规格化浮点数,指数为 1–127 = –126,尾数中有隐藏的 1,用十六进制 表示尾数为–1.002116H,故 R2 表示的真值为–1.002116H × 10-126 8.假定机器 M 的字长为 32 位,用补码表示带符号整数。下表第一列给出了在机器 M 上执行的 C 语言
程序中的关系表达式,请参照已有的表栏内容完成表中后三栏内容的填写。 关系表达式 运算类型 结果 说明 0 == 0U –1 < 0 –1 < 0U 2147483647 > –2147483647 – 1 2147483647U > –2147483647 – 1 2147483647 > (int) 2147483648U –1 > –2 (unsigned) –1 > –2 无符号整数 有符号整数 无符号整数 有符号整数 无符号整数 有符号整数 有符号整数 无符号整数 1 1 0 1 0 1 1 1 00…0B = 00…0B 11…1B (–1) < 00…0B (0) 11…1B (232–1) > 00…0B(0) 011…1B (231–1) > 100…0B (–231) 011…1B (231–1) < 100…0B(231) 011…1B (231–1) > 100…0B (–231) 11…1B (–1) > 11…10B (–2) 11…1B (232–1) > 11…10B (232–2) float sum_elements(float a[], unsigned len) { 9.以下是一个 C 语言程序,用来计算一个数组 a 中每个元素的和。当参数 len 为 0 时,返回值应该是 0, 但是在机器上执行时,却发生了存储器访问异常。请问这是什么原因造成的,并说明程序应该如何 修改。 1 2 3 4 5 6 7 8 9 (i = 0; i <= len–1; i++) result += a[i]; return result; } result = 0; i; int float for 参考答案: 参数 len 的类型是 unsigned,所以,当 len=0 时,执行 len-1 的结果为 11…1,是最大可表示的无符号 数,因而,任何无符号数都比它小,使得循环体被不断执行,引起数组元素的访问越界,发生存储 器访问异常。 只要将 len 声明为 int 型,或循环的测试条件改为 i
–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 因此,该格式浮点数的数量级在 10–10~109 之间。 12 位定点补码整数的表示范围为:–211~+(211–1),即:–2048~2047 由此可见,定点数和浮点数的表示范围相差非常大。 11. 下列几种情况所能表示的数的范围是什么? (1) 16 位无符号整数 (2) 16 位原码定点小数 (3) 16 位补码定点小数 (4) 16 位补码定点整数 (5) 下述格式的浮点数(基数为 2,移码的偏置常数为 128) 数符 1 位 阶码 8 位移码 尾数 7 位原码 参考答案: (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,故阶码为 4+127 = 10000011B, 数符为 0,尾数为 1.00110…0,所以 +19 表示为 0 10000011 001 1000 0000 0000 0000 0000,用十六进制表示为 41980000H。 –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。 258=100000010B=1.0000001B × 28, 故阶码为 8+127=10000111B, 数符为 0,尾数为 1.0000001,所以 258 表示为 0 10000111 000 0001 0000 0000 0000 0000,用十六进制表示为 43810000H。
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) IEEE754 单精度格式为:0 10001011 0000 0000 0010 0000 0000 000 (45801000H) 粗体部分为除隐藏位外的有效数字,因此,在两种表示中是相同的序列。 14.设一个变量的值为–2147483647,要求分别用 32 位补码整数和 IEEE754 单精度浮点格式表示该变量 (结果用十六进制表示),并说明哪种表示其值完全精确,哪种表示的是近似值。 参考答案: –2147483647 = –111 1111 1111 1111 1111 1111 1111 1111B = –1.11 1111 1111 1111 1111 1111 1111 1111 × 230 32 位 2-补码形式为:1000 0000 0000 0000 0000 0000 0000 0001 (80000001H) IEEE 754 单精度格式为:1 10011101 1111 1111 1111 1111 1111 111 (CEFFFFFFH) 32 位 2-补码形式能表示精确的值,而浮点数表示的是近似值,低位被截断 15.下表给出了有关 IEEE 754 浮点格式表示中一些重要数据的取值,表中已经有最大规格化数的相应内 容,要求填入其他浮点数的相应内容。(注:表中 a 代表一个在 1 到 10 之间的正纯小数) 双精度 单精度 项目 阶码 尾数 以 2 的幂次表示 以 10 的幂次表 以 2 的幂次表示 的值 示的值 的值 0 1 最大规格化数 最小规格化数 最大非规格化数 最小非规格化数 +∞ NaN 00000000 01111111 11111110 00000001 00000000 00000000 11111111 11111111 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 – – 0 1 a×1038 a×10–38 a×10–38 a×10–44 – – 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 y 在机器内部的机器数为:0 10000001 11100…0 (40F0 0000H) 100=64+32+4=1100100B i 在机器内部表示的机器数为:0000 0000 0110 0100(0064H) 大端机 内容 BEH 00H 00H 00H 40H F0H 00H 00H 00H 64H 地址 100 101 102 103 108 109 110 111 112 113 小端机 内容 00H 00H 00H BEH 00H 00H F0H 40H 64H 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,说明确实发生了传输错误,验证正确。
分享到:
收藏