2026/10/24 23:19:23

计算机组成原理课后习题答案:MIPS、CPI、IEEE 754与校验码计算详解

计算机组成原理课后习题答案:MIPS、CPI、IEEE 754与校验码计算详解 简介《计算机组成与系统结构》袁春风第三版课后习题答案汇总面向高校计算机专业学生、考研复习者及自学者。资源围绕计组与系统结构核心知识点含汇编语言与指令系统对性能评估、指令系统等章节习题给出详细参考答案覆盖执行时间、MIPS、CPI、时钟频率、性价比分析等关键计算类型并附有解题思路便于读者理解机器性能比较与指令执行效率的判定方法。答案按章节编排第一、二章的典型题目均给出具体计算步骤与结论对比可帮助读者快速定位薄弱环节。包体为1个doc文档容量约1.75MB打开即可查阅全部章节答案目前已有1190人学习浏览是经过实践检验的资料。该文档不仅给出数值结果还保留关键计算过程有助于排查计算盲点、巩固课堂所学是课后自测与考前强化的实用素材。1. 计组课后习题的隐藏分值最容易翻车的不是背诵是计算翻开《计算机组成与系统结构》袁春风第三版的课后习题最容易被低估的题型是带数字的计算题。很多同学背熟了概念却反复在 MIPS、CPI、浮点数表示和奇偶校验位上翻车。这套课后习题答案汇总的真正价值不在「看答案」而在把考点拆成三个层次第1章的基准测试与性能评估、第2章的机器数与 IEEE 754、第3章的指令系统与运算部件。再加上计组汇编语言指令系统里最常考的移位、符号扩展和乘法优化基本就是期末卷和考研题的全部计算来源。这篇备考笔记按考点模块逐题拆答案和答题思路照着练完再换数据也不怕。2. 高频考点性能评估MIPS、CPI 与「快多少」的标准答案2.1 拿到一张成绩表先分清「时间」和「条数」再动笔第1章第5题是所有版本教材都爱考的经典两个程序 P1、P2 在 M1、M2 上运行给出各自的指令条数和执行时间还要考虑机器价格。这类题的第一步不是套公式而是先把表格里的信息归类——执行时间直接比大小指令条数用来算 MIPS不要混在一起读。对于 P1M1 用了 10000msM2 用了 5000ms所以 M2 执行时间是 M1 的一半答题就写「M2 比 M1 快一倍」对于 P2M1 用 3msM2 用 6ms反过来 M1 比 M2 快一倍。这里的「快一倍」指的是时间减半如果你写成「速度快一倍」严格来说要用执行时间的倒数比也就是 1/5000ms 和 1/10000ms 的比值结论同样是 M2 快一倍。MIPS 的计算最容易错单位。M1 上执行 P1 的速度是 200×10^6 指令除以 10 秒等于 20×10^6 条每秒即 20MIPSM2 上是 150×10^6 除以 5 秒即 30MIPS。P2 在 M1 上是 300×10^3 除以 0.003 秒等于 100MIPS在 M2 上是 420×10^3 除以 0.006 秒等于 70MIPS。注意题目给的是毫秒一定要先换算成秒再除。CPI 是这个题的另一个得分点。CPI 的公式是「总时钟周期数 ÷ 指令条数」总时钟周期数又等于执行时间乘以时钟频率。M1 上 P1 的 CPI 就是 10s × 800MHz ÷ 200×10^6 40M2 上 P1 的 CPI 是 5s × 1.2GHz ÷ 150×10^6 40。两个机器算出来一样这个结论本身就说明执行时间短不代表 CPI 低因为 M2 的频率更高每个时钟周期更短。2.2 CPI 不能直接比第6题的思考题就是挤水分用的第1章第6题给了一个很典型的陷阱场景M1 时钟频率 1GHzM2 时钟频率 1.5GHz五类指令 A~E 在各自机器上的 CPI 不同第一问问峰值 MIPS。峰值 MIPS 的原则是「假设所有指令都用 CPI 最小的那类」M1 全跑 A 类指令CPI 为 1峰值就是 1000MIPSM2 上 A 类 CPI 是 2但频率是 1.5GHz所以峰值是 750MIPS。这里每类指令的 CPI 是已知表别自己编。第二问说五类指令条数完全相同即各占 20%。M1 的平均 CPI 20% × (12234) 2.4M2 的平均 CPI 20% × (22456) 3.8。看起来 M2 的 CPI 比 M1 大很多但题目问的是哪台机器更快还要快多少答案就不能直接拿 CPI 比。设程序指令条数为 NM1 执行时间是 2.4N × (1/1GHz) 2.4N nsM2 执行时间是 3.8N × (1/1.5GHz) ≈ 2.53N ns所以 M1 更快每条指令平均快 0.13ns约快 5%。教材后面追问如果说 M1 比 M2 快 (3.8-2.4)/3.8 36.8%错在哪错在分母用的是 CPI 而不是执行时间而且完全没考虑 M2 的时钟频率更高。这类题通常这么答先算每条指令的执行时间即 CPI × 时钟周期再比较执行时间差这才是「快多少」的依据。再看第7题它把这个思路压缩得更短M1 时钟周期 0.8ns、CPI 为 4M2 时钟周期 1.2ns、CPI 为 2。M1 每条指令耗时 3.2nsM2 每条指令耗时 2.4nsM2 更快(3.2-2.4)/3.2 25%。注意分母是 M1 的时间因为题干问的是「比 M1 快多少」。2.3 性价比算术平均和几何平均是两种答案别背结论第1章第5题的第(4)(5)问考的是性价比而且答案不止一个。题目设 M1 价格 5000 元、M2 价格 8000 元用户关心响应时间性价比定义为 R 1 ÷ (执行时间 × 价格)。注意性能取「执行时间的倒数」因为响应时间越短越好。如果用户只大量跑 P1M1 是 10s × 5000 50000M2 是 5s × 8000 40000执行时间与价格的乘积越小性价比越高所以选 M2。如果用户两个程序跑得一样多就要先定义「平均执行时间」。用算术平均M1 是 (100.003)/2 × 5000 ≈ 25007.5M2 是 (50.006)/2 × 8000 ≈ 20024仍是 M2 性价比高用几何平均M1 是 sqrt(10×0.003) × 5000 ≈ 866M2 是 sqrt(5×0.006) × 8000 ≈ 1385.6反而 M1 性价比高。所以这道题的答题策略是题目指定用哪种平均就按哪种算没指定时要说明「若用算术平均选 M2若用几何平均选 M1」。真正想拿分是把公式写出来、把两个乘积算出来而不是死记「选 M1 还是 M2」。指标公式单位陷阱MIPS指令条数 ÷ (执行时间 × 10^6)时间先换秒CPI总周期数 ÷ 指令条数总周期 时间 × 频率执行时间指令条数 × CPI × 时钟周期注意时钟周期与频率互倒性价比1 ÷ (执行时间 × 价格)性能取倒数3. 高频考点数的机器表示进制转换、补码移码与 IEEE 7543.1 进制转换与8421码先定整小数分界再分组速算第2章第3题是进制转换的大礼包覆盖了十进制转二进制、二进制转八进制/十六进制、8421 码互转。第一个小题 25.8125整数部分 25 每次除 2 取余得 11001小数部分 0.8125 乘 2 取整0.8125×21.625 取 10.625×21.25 取 10.25×20.5 取 00.5×21.0 取 1所以小数部分是 .1101合并为 11001.1101B。再看八进制和十六进制二进制转八进制按三位一组整数部分从右往左分小数部分从左往右分得到 31.64转十六进制按四位一组得到 19.D。这些和答案完全对上说明第一步只要把整数和小数分开处理后面全顺。第二、三小题混合了 8421 码。8421 码和二进制不是一回事每个十进制数码用一个 4 位二进制编码表示。比如 101101.011B 转十进制按位权算得 45.375转 8421 码时把每个十进制数码写成 4 位4 就是 01005 就是 0101小数部分 3 是 0011、7 是 0111、5 是 0101所以得到 0100 0101.0011 0111 0101。第四小题 4E.C 是十六进制先转成二进制 0100 1110.11再按位权展开转十进制 78.75。这类题考试时间很紧常见的提速办法是先把二进制写出来再以小数点为界向两边分组遇到 8421 码就先转十进制再转二进制不要让 8421 码和十六进制混着算。如果不小心把 8421 当成十六进制读第四小题的 C 就会被误解实际上十六进制 C 对应的二进制是 1100而 8421 码里没有超过 9 的数码。3.2 原码补码移码8位机器数的「溢出」和「双零」要按格式判定第2章第4、5、6题集中考察 8 位机器数1 位符号位 7 位数值位下的原码、补码、移码表示。最容易出错的是 1.0 和 -1.0这是定点小数格式7 位数值位最大只能表示 0.1111111约等于 1-2^-7所以 1.0 无论原码还是补码都溢出但补码定点小数比原码多表示一个 -1因此 -1.0 的补码可以写成 1.0000000。而 -1.0 的原码 1.0000000 在这个格式下表示的是 -0不是 -1。另一个易混点是「双零」。0 和 -0 的原码分别是 0.0000000 和 1.0000000但补码都写成 0.0000000移码更特殊0 和 -0 的移码都是 10000000。移码和补码之间只差符号位取反所以已知补码求移码时先看符号位直接翻转就很快。第6题给了四个补码求真值其中 [x]补 10000000 时真值是 -128这是补码能表示的最小数而 [x]补 11010011符号位为 1先取反加一得到 00101101即 45 的补码所以真值是 -45。机器数格式0-0-1.0定点小数表示范围特点原码0.00000001.0000000溢出正负零不唯一补码0.00000000.00000001.0000000-1 可表示移码1000000010000000—零的编码唯一答这类题有一个固定动作先看题目给的是定点小数还是定点整数再看是几位有效位最后才写机器数。很多同学把定点小数当定点整数写或者忘了补码的符号位参与数值计算这类失分完全可以避免。3.3 IEEE 754同一个寄存器三种指令三种真值第2章第7题是一道非常经典的综合题32 位字长的机器寄存器 R1 0000108BHR2 8080108BH同一份二进制内容无符号数加法指令、带符号整数乘法指令、单精度浮点数减法指令下真值完全不同。这题考察的不是计算能力而是「真值由指令的解读方式决定」。先按无符号数加法指令看R1 就是十六进制数 108BHR2 就是 8080108BH高位不需要处理。按带符号整数乘法指令看R1 最高位为 0是正数真值还是 108BHR2 最高位为 1是负数取反加一后得到 7F7FEF75H所以真值是 -7F7FEF75H。这里很多人忘记取反加一后还要再补一次进位导致末位多算或少算 1。浮点数的解读是重点。IEEE 754 单精度格式是 1 位符号位、8 位阶码、23 位尾数。R1 的 32 位展开后符号位 0阶码 0000 0000尾数部分是 000 0000 0001 0000 1000 1011。阶码全 0 表示非规格化数指数固定为 -126尾数没有隐藏的 1。尾字换算成十六进制是 002116H所以真值是 0.002116H × 2^-126。R2 的符号位 1阶码 0000 0001是指数 1-127-126 的规格化数尾数前面要补一个隐藏位 1所以真值是 -1.002116H × 2^-126。请注意这里的底数是 2不是 10。教材个别地方为了估数量级会写「约等于 10^-38」但答题写精确值必须用 2^-126。判断规格化还是非规格化只看阶码全 0 非规格化、全 1 是无穷或 NaN其他都是规格化数这个判定动作写三遍都不为过。第12题和第14题则要求反向操作给定十进制数先转成 IEEE 754 十六进制。19 10011B 1.0011 × 2^4阶码是 4127131即 10000011B符号位 0尾数是 001100000000000000000000拼接后得到 0100 0001 1001 1000 0000 0000 0000 0000即 41980000H。258 的阶码是 8127135即 10000111B处理尾数 0000001 后得到 43810000H。这类题先写二进制科学计数法再分别凑符号位、阶码、尾数三段最后转十六进制顺序不能乱。3.4 大端小端与内存分布画图题的标准步骤第2章第17题考大端小端内存分布先要把变量的机器数算出来再往地址里填。x -0.125二进制是 -0.001B规格化后 -1.0 × 2^-3IEEE 754 表示成 1 01111100 0000 0000 0000 0000 0000 0000即 BE000000H。y 7.5 111.1B 1.111 × 2^2表示成 0 10000001 1110 0000 0000 0000 0000 0000即 40F00000H。i 100 用 16 位补码表示是 0064H。大端机和小端机的本质区别是字节序大端把最高有效字节放在低地址小端把最低有效字节放在低地址。x 的四个字节是 BE、00、00、00在大端机地址 100~103 依次是 BE 00 00 00小端机则反过来是 00 00 00 BE。y 同理大端是 40 F0 00 00小端是 00 00 F0 40。i 只有两个字节大端是 00 64小端是 64 00。答题时要先写出完整机器数再按字节切分最后按端序逐地址填写。常见的错误是把小端机的地址边界也反过来其实地址编号不变变的只是每个地址里放的字节内容。画出「地址 内容」两列表格这题基本稳拿满分。4. 高频考点数据校验与指令系统奇偶校验、SEC、CRC 和移位陷阱4.1 奇偶校验先数清楚每个字节里有多少个 1第2章第18题给出了总线奇校验的完整流程32 位数据线上传输的信息是 8F 3C AB 96H每 8 位数据跟 1 位奇校验位。发送方要做的是把每个字节单独数 1 的个数再决定校验位取 0 还是 1。奇校验要求「数据位 校验位」中 1 的总数为奇数。8F 展开为 1000 1111一共有 5 个 1已经是奇数所以校验位取 03C 是 0011 1100有 4 个 1校验位必须取 1 才能凑成奇数AB 是 1010 10115 个 1校验位取 096 是 1001 01103 个 1校验位取 1。所以发送方的 4 个校验位依次是 0、1、0、1。如果你按十六进制直接猜很容易把 8F 数成奇数个 1 就以为校验位是 1实际上要展开成二进制逐位数。接收方收到的是 87 3C AB 96H校验位 0101。对第一个字节 87 重新数 11000 0111 有 134 个 1奇校验位应该补 1但收到的校验位是 0两者异或得 1说明第一个字节出错。对照发送前的 8F 和接收后的 87确实是二进制下只差 1 位。答题写「用重新计算的校验位与收到的校验位异或非 0 即出错」就够了不需要真的把所有字节都验一遍。4.2 SEC 与 CRC出错定位题的两种标准流程第2章第19题考的是 SEC 纠错码也叫单纠错码本质上是海明码思想。16 位数据需要 5 个校验位校验位放在 1、2、4、8、16 这些 2 的幂位置上原来的 M1~M16 数据位穿插进其他位置。素材中给出的原数据是 0101 0001 0100 0110插入校验位后按各自覆盖的位做异或得到 P11、P21、P30、P40、P50所以发送时校验位连起来是 00011。如果第 5 位数据出错数据字变为 0101 0001 0101 0110重新计算得到新的校验位 01010。把新旧校验位异或得到故障字 01001这是二进制数 9直接指出码字第 9 位出错而第 9 位恰好就是原数据 M5。这里不用死记覆盖关系要记的是故障字的数值等于出错位置的编号这是 SEC 码「定位」的核心。第20题是 CRC 循环冗余校验。数据信息 100011生成多项式 G(x) x^31对应除数 1001。因为生成多项式是 4 位所以在数据后面补 3 个 0变成 100011000用这个数对 1001 做模 2 除法模 2 除法的减法就是异或不借位。计算得到的余数是 111所以发送的 CRC 码是 100011111。接收端拿到 100010111再用 1001 模 2 除余数为 001非 0说明传输出错。这一题答题要把「补 0 的个数 生成多项式位数 - 1」写出来再做除法过程如果只写答案 111阅卷看不到你的模 2 除过程很可能扣一半分。4.3 无符号陷阱与移位len-1 和 func1、func2 的对照第2章第9题是一个真实场景计算数组元素求和的函数参数 len 声明为 unsigned当 len0 时发生了存储器访问异常。原因很简单但很容易忽略len-1 在无符号数运算下不是 -1而是最大的无符号数 2^32-1。循环条件 i len-1 变成 i 2^32-1循环体不断执行数组越界访问。修改方法是把 len 声明成 int或者把测试条件改成 i len。这类题答题先写出无符号数回绕规则再说越界后果最后给出修法。int sum_elements(float a[], unsigned len) { int i; float result 0; for (i 0; i len - 1; i) result a[i]; return result; }func1 和 func2 是同一个移位陷阱的正反两面。func1 先左移 24 位再逻辑右移 24 位相当于把最高 8 位清零结果一定是非负整数func2 先把 word 强制转换成 int 再左移左移后的符号位参与算术右移高 24 位会被填充成符号位的值也就是把 8 位值做了符号扩展。看参考答案w 00000080H 时func1 得到 128func2 得到 -128w 000000FFH 时func1 得到 255func2 得到 -1。差别全在于右移是逻辑右移还是算术右移。int func1(unsigned word) { return (int)((word 24) 24); } int func2(unsigned word) { return ((int)word 24) 24; }C 语言里逻辑移位和算术移位的选择由操作数类型决定无符号数右移补 0带符号数右移补符号位。左移无论类型都会丢弃高位所以「左移再右移」到底是清零还是符号扩展取决于中间类型转换节点。答题模板就一句无符号数采用逻辑移位带符号整数采用算术移位两条代码分别对应这两种规则。4.4 乘法优化与 ALU从反编译反推常量第3章第5题给出一段 C 代码和一段反编译代码要求推断 M 和 N。arith 函数里有 x*M y/N而 optarith 里的关键操作是 x 4 后再 x - t也就是 16x - x 15x所以 M15。y/N 的部分对应 y 2即除以 4所以 N4。前面那句 if (y 0) y 3 是为了让负数右移的结果向 0 取整因为算术右移是向下取整-1 2 得到 -1而 -1/4 在 C 语言里按向 0 取整应该等于 0。int arith(int x, int y) { int result 0; result x * M y / N; return result; } int optarith(int x, int y) { int t x; x 4; x - t; if (y 0) y 3; y 2; return x y; }思考题里问能不能把 y 3 改成 y 2答案是「不能」。原因是 y -4 时-4 2 -2-2 2 -1而 -4 / 4 -1看起来相等但 y -3 时-3 2 -1-1 2 -1而 -3 / 4 向 0 取整是 0不等。加 3 的本质是为负数右移补上「移走部分的余数补偿」让结果从向下取整变成向 0 取整。这个题的后续延伸是 ALU 和进位链。第3章第6、7、8题涉及串行进位与先行进位的 C1~C4 逻辑表达式以及用 SN74181 和 SN74182 组成 16 位、32 位 ALU。这里不需要背芯片引脚重点是把先行进位的核心表达式理解成「本级生成 Gn 与传递 Pn 的组合」考试若出大题通常会让画零标志、进位标志、溢出标志、符号标志的生成电路思路是先算 F15再由 F15 和各标志位的关系式搭电路。5. 易错题/易错点五处高频失分位置与修正方法5.1 计算类丢分快多少、CPI 加权、CPU 时间第一个高频失分点是「快多少」说反参照系。错在哪看到 M1 执行时间 10000ms、M2 执行时间 5000ms直接写「M1 比 M2 慢 2 倍」。为什么错倍数是相对量必须指明以谁为参照。时间比是 2:1M2 时间是 M1 的一半正确说法是「M2 快一倍」或「M1 时间是 M2 的 2 倍」写成慢 2 倍就变成了三倍关系的含义。怎么答对先写「以 M1 为参照M2 的执行时间是其 1/2」再补一句「所以 M2 快一倍」方向就不会错。第二个高频失分点是 CPI 不做加权平均。错在哪第9题里 S1 指令序列包含 A、B、C、D 四类指令直接 (1234)/4 等于 2.5。为什么错各种指令的条数不同A 类有 5 条、B 类 2 条、C 类 2 条、D 类 1 条简单平均忽略了条数权重。怎么答对CPI (5×1 2×2 2×3 1×4) / (5221) 1.9总周期数是 10 × 1.9 19执行时间 19 / 500MHz 38ns。任何 CPI 计算题先把分子写成「每条指令条数乘以对应 CPI 的累加和」再把分母写成总指令条数。第三个高频失分点是 CPU 时间与真实时间混为一谈。错在哪第8题说「从程序 P 开始启动到执行结束所需的时间是 4 秒」很多人直接把这个 4 秒当成程序的 CPU 执行时间。为什么错从启动到结束的墙钟时间中间可能穿插操作系统程序或其他用户程序4 秒是总时间。怎么答对先按 CPU 时间公式算指令数 8×10^9、CPI 1.25、时钟频率 4GHz得到 1.25 × 8×10^9 / 4×10^9 2.5 秒再求占比 2.5/4 62.5%。答题写「CPU 时间 指令数 × CPI / 频率」再用墙钟时间做分母。5.2 表示与校验类丢分浮点底数、校验位分组第四个高频失分点是 IEEE 754 的指数底数写成 10。错在哪第7题参考答案里出现「0.002116H × 10^-126」的写法有同学照抄到试卷上。为什么错单精度浮点数的阶码表示的是 2 的多少次幂不是 10 的多少次幂非规格化数的值是 ±尾数 × 2^-126规格化数的值是 ±1.尾数 × 2^(E-127)。怎么答对写精确值一律用 2 的幂即 0.002116H × 2^-126如果题目只要求数量级可以写「约 10^-38」但要主动加「约等于」三个字否则概念分照扣。第五个高频失分点是校验位的顺序或分组出错。错在哪第18题发送方 4 个校验位算出来是 0101结果写成 1010。为什么错校验位必须按「第一个字节对应第一个校验位」的顺序排列很多同学按字节从右往左读或把奇校验和偶校验的取反规则搞混。怎么答对先明确校验方式再逐字节数 1。8F 有 5 个 1奇校验补 03C 有 4 个 1奇校验补 1AB 有 5 个 1补 096 有 3 个 1补 1连起来是 0101。验证时用「重算校验位与接收校验位异或」判断计算过程要保留方便倒查。6. 答题技巧计组计算题的「三板斧」6.1 一套固定流程计组计算题看起来题型多变实际上都逃不过三个动作建表、选公式、验算。拿到题第一步把已知量整理成表执行时间统一成秒时钟频率统一成 Hz指令条数统一成条MIPS 公式里的 10^6 和 ms 之间的换算最容易出问题建表时顺手写清楚。第二步选公式求执行时间用 指令数 × CPI / 频率求 CPI 用 总周期数 / 指令数求 MIPS 用 指令数 / (时间 × 10^6)求性价比用 1 / (执行时间 × 价格)。第三步验算重点检查三点快多少的参照系写没写清楚、IEEE 754 的指数底数是 2 不是 10、校验位的分组和顺序对不对。6.2 押题方向从这份答案的分布看最可能出的综合大题是「性能评估 IEEE 754 校验」的三段式第一问给两台机器的执行时间和指令条数算 MIPS、CPI、选机器第二问给一个十六进制寄存器内容问无符号数、补码、浮点三种解读下的真值第三问给一段传输数据算奇偶校验位并定位错误。备考时把这三类题各练两遍答题速度会明显上来。从那以后我每次做计组计算题都强制走一遍「建表、选公式、验算」三板斧尤其是看到「快多少」「性价比」「非规格化浮点数」这几个词先停下来检查单位、底数和参照系。这套课后习题答案里藏着的坑基本就这些踩过一遍就不会再踩。希望帮到你。本文还有配套的精品资源点击获取