简介:这份资源是白中英《计算机组成原理》第六版教材的课后习题答案,面向计算机科学与技术专业本科生及考研复习者,用于对照练习、检验学习成果并查漏补缺。内容覆盖数据表示与补码运算、运算器与ALU设计、存储层次与Cache、指令系统与寻址方式、CPU结构与流水线、I/O与中断DMA、总线、接口外设、微程序设计及并行计算等核心章节,可帮助读者在刷题后快速核对思路、理解硬件原理。资源包共1个文件,为PDF格式,大小约3.97MB,便于在电脑或平板上直接翻阅检索。目前已有13634人学习下载,适合课后同步练习、期末复习与考研专业课备考时配合教材使用,通过逐题对照答案深化对计算机系统组成与工作机制的理解。
1. 从一道“送分题”翻车说起:这门课到底考什么
很多人第一次翻开这本教材的课后题,会觉得第 1 章的数制转换是送分题,结果一上手就翻车:十进制小数转二进制转不干净,补码求负数的边界值算错一位,浮点数阶码和尾数一混,后面全盘皆输。计算机组成原理这门课的考点分布很集中——数据表示与运算、存储系统、指令系统、CPU 与流水线、总线与 I/O、微程序与并行,六到八个模块撑起整张卷子,而课后习题恰好是这些模块的“最小可练单元”。拿分逻辑也不复杂:概念题靠术语准确,计算题靠步骤完整,设计题靠结构图加控制信号说清楚。这份第六版课后习题答案适合正在刷题、准备期末或考研专业课复盘的人,拿来对答案、抠步骤、补盲区,比从头再读一遍教材快得多。
2. 数据表示与运算器:补码、浮点数、ALU 三类题怎么答
2.1 数制转换与码制:别在“边界值”上丢分
这一块的题看着简单,但阅卷时最容易被扣步骤分。常见题型是给一个十进制数,要求写出原码、反码、补码和移码,或者反过来由补码求真值。答题思路固定成三步:先定字长(题目没说就按 8 位或 16 位假设并写明),再定符号位,最后逐位取反加一。真正拉开差距的是边界值,比如 -128 的 8 位补码是 10000000,它没有对应的原码和反码,很多答案直接写“不存在”却不解释,面试官或阅卷人最想听的是那句“补码比原码多表示一个负数”。
小数转换则要写清“乘 2 取整、顺序排列”的过程,不要只给结果。浮点数题按 IEEE 754 的格式拆成符号位、阶码(含偏移量)、尾数(隐含最高位 1)三段,答题时把偏移量写出来,阶码用移码表示这一点必须点明,否则步骤分照扣。
2.2 运算器与 ALU:从功能表推到逻辑表达式
运算器设计题通常给一个功能选择端,要求写出 ALU 的输出逻辑或画出结构。答题套路是先列功能表,再对每一位写逻辑表达式,最后说明进位链是串行还是并行。下面这段用 Python 模拟一位全加器和带进位的加法,帮助把“进位怎么传”这件事跑一遍:
def full_adder(a, b, cin): # 一位全加器:和位与进位输出 s = a ^ b ^ cin cout = (a & b) | (cin & (a ^ b)) return s, cout def ripple_add(x, y, n=8): # 串行进位加法器:低位进位逐级传给高位 result, carry = 0, 0 for i in range(n): bit_x = (x >> i) & 1 bit_y = (y >> i) & 1 s, carry = full_adder(bit_x, bit_y, carry) result |= (s << i) return result, carry # carry 为 1 表示溢出(无符号视角) print(ripple_add(200, 100)) # 300 超出 8 位,进位为 1这段代码的关键在cout的表达式:进位由“两个输入都为 1”或“进位输入为 1 且两输入不同”产生,这正是 ALU 进位逻辑的标准写法。参数n控制字长,改成 16 就是 16 位加法器。考试里如果问“串行进位和并行进位的差别”,答速度与延迟:串行进位延迟随位数线性增长,先行进位用生成和传播信号把延迟压到对数级,代价是电路更复杂。
2.3 真题演练:补码加减与溢出判断
典型题:设字长 8 位,用补码计算 105 + 50,并判断是否溢出。答题思路是先转补码、再相加、最后看符号位。105 的补码是 01101001,50 是 00110010,相加得 10011011,符号位变成 1,而两个正数相加结果应为正,故溢出。这里易错的是“只看最高位进位”就下结论,正确判据是“最高位进位与次高位进位异或为 1”。面试官追问时,补一句“有符号溢出看符号位是否异常,无符号溢出看最高位进位”,这题就答满了。
3. 存储系统与指令系统:Cache 命中率、寻址方式的高频问法
3.1 存储层次与 Cache:三个参数决定一道计算题
存储系统的计算题几乎年年出现,核心是三个参数:块大小、组相联路数、替换策略。题目一般给主存地址位数和 Cache 容量,要求算标记位、组索引位、块内偏移位各多少位。答题模板是先算块内偏移 = log2(块大小),再算组数 = Cache 容量 / (块大小 × 路数),组索引位 = log2(组数),剩下的就是标记位。把这三步写在卷面上,即使最后数字算错,过程分也能拿到大半。
平均访问时间题则套公式:命中率 × 命中时间 + 未命中率 × 未命中开销。这里最常见的坑是把“未命中开销”只算主存访问时间,忘了加上把块调入 Cache 的时间。答题时明确写出“未命中开销包含块传送时间”,这一句就是区分度。
3.2 指令系统与寻址:格式题要画字段图
指令格式题给指令字长和操作码位数,问最多支持多少条指令、地址码范围多大。答题思路是先画字段划分图,再算各字段能表示的编码数。寻址方式题常问“立即寻址、直接寻址、间接寻址、变址寻址、相对寻址”的区别,答的时候用一张对比表最稳:
| 寻址方式 | 有效地址来源 | 访存次数 | 典型用途 |
|---|---|---|---|
| 立即寻址 | 指令中直接给出操作数 | 0 | 常量赋值 |
| 直接寻址 | 指令中给出地址 | 1 | 访问固定变量 |
| 间接寻址 | 指令给出地址的地址 | 2 | 指针、跳转表 |
| 变址寻址 | 变址寄存器 + 形式地址 | 1 | 数组遍历 |
| 相对寻址 | PC + 偏移量 | 1 | 转移指令 |
这张表在简答题里可以直接默写,但要注意“访存次数”一栏是阅卷重点,间接寻址写 2 次、立即寻址写 0 次,写错就丢分。真题里还常把相对寻址和转移指令结合,问“偏移量为负表示什么”,答“向低地址方向转移,即向后跳”。
3.3 真题演练:Cache 替换与写策略
典型题:某 Cache 采用 4 路组相联,问 LRU 替换时命中率如何变化、写直达和写回各有什么代价。答题思路分两层:替换策略影响的是冲突缺失,LRU 在局部性好的程序里表现稳定,但实现需要维护访问计数;写策略则要对比写直达(每次写都更新主存,一致性好但流量大)和写回(只写 Cache,替换时才写回,流量小但需要脏位)。面试官最想听的是“写回需要脏位标记,且多处理器下要处理一致性”,把脏位这个词说出来,答案就有硬件味了。
4. 易错点:这五类题丢分最多,逐条拆给你看
4.1 补码边界值:错在“想当然”
错在哪:把 -128 的原码也写成 10000000。为什么错:8 位原码的表示范围是 -127 到 +127,-128 超出范围,只有补码能表示。怎么答对:先写表示范围,再说明“补码比原码多一个负数”,边界值单独列出来。
4.2 浮点数阶码:错在偏移量
错在哪:阶码直接写真实指数,忘了加偏移量。为什么错:IEEE 754 的阶码用移码存储,偏移量是 2^(k-1)-1。怎么答对:拆字段时把“符号位 1 位、阶码 k 位(含偏移)、尾数隐含 1”三句话写全,偏移量数值写出来。
4.3 Cache 地址划分:错在组数算成块数
错在哪:把 Cache 容量除以块大小直接当组数。为什么错:组相联下每组有多个块,组数 = 总块数 / 路数。怎么答对:先算总块数,再除以路数得组数,最后取对数得索引位。
4.4 流水线冒险:错在只答“有冲突”
错在哪:问流水线冒险只写“数据相关”。为什么错:冒险分结构冒险、数据冒险、控制冒险三类,每类的解决办法不同。怎么答对:分类作答,数据冒险用转发或停顿,控制冒险用分支预测或延迟槽,结构冒险靠资源重复。
4.5 中断与 DMA:错在混淆“谁控制总线”
错在哪:把中断方式和 DMA 方式的传输过程写成一样。为什么错:中断由 CPU 执行程序传送数据,DMA 由控制器直接接管总线、CPU 只在开始和结束时介入。怎么答对:抓住“数据传送是否经过 CPU”这条主线,DMA 答“窃取总线周期、成块传送、结束时中断通知”。
5. 总线、I/O 与微程序:简答题的采分点在哪
5.1 总线与接口:分类题按“信号类型”答
总线题常问三总线结构的分工。答题时按信号类型拆:数据总线传数据、双向、宽度决定一次传送位数;地址总线传地址、单向、宽度决定寻址空间;控制总线传控制信号、方向因信号而异。接口题则要说出“接口是主机与外设之间的缓冲与协议转换层”,USB、PCIe 这类名字点到即可,重点答“串行与并行、速率与拓扑”的差别。真题里问“为什么现代总线趋向串行”,答“串行可提高时钟频率、减少引脚、支持差分抗干扰”,三点答全就是满分。
5.2 中断与 DMA:画时序比背定义管用
I/O 控制方式的对比题,最稳的答法是画一个简化的时序描述:程序查询是 CPU 反复读状态;中断方式是外设就绪后发中断请求,CPU 响应后执行中断服务程序;DMA 是控制器申请总线、成块搬运、结束后中断。答题时把“CPU 参与程度”作为主线,从高到低排列,阅卷人一眼就能看到逻辑。
5.3 微程序与并行:控制信号从哪来
微程序题问“微指令格式包含哪些字段”,答操作控制字段和顺序控制字段,再补一句“水平型微指令并行能力强、微程序短,垂直型相反”。并行计算题则落到“多核、多处理器、指令级并行”三个层次,答出“并行提升吞吐量但受 Amdahl 定律限制”即可。这类题不需要长篇大论,采分点是术语准确加一句限定条件。
6. 刷题节奏:把课后答案用成“错题本”而不是“对答案工具”
我带人复盘这门课时,最有效的一个做法是把课后题分三遍刷,而不是对着答案抄一遍就过。第一遍只做计算题,限时完成,做完先不对答案,把每一步写在纸上;第二遍拿这份第六版课后习题答案逐题比对,重点看“步骤差在哪”而不是“结果对不对”,凡是步骤和答案不一致的,用红笔在旁边写一句“我漏了哪个判据”;第三遍只刷红笔标记的题,隔三天再做一次,能做全对才算过。这个节奏的关键在于:答案的价值不在结果,而在它暴露了你哪一步的推理是跳过的。
具体到时间分配,数据表示和存储系统各占三成精力,指令系统和 CPU 占三成,总线和 I/O 占一成,微程序与并行占一成。计算题每天不超过十道,但每道必须写完整步骤;简答题用“关键词默写”的方式练,比如合上书默写 Cache 地址划分的三步、DMA 的三个阶段,默完再对照答案补漏。下面这张表可以直接贴在书桌前当检查清单:
| 模块 | 必练题型 | 自检标准 |
|---|---|---|
| 数据表示 | 补码边界、浮点数拆字段 | 能写出偏移量和隐含位 |
| 运算器 | 全加器逻辑、溢出判断 | 能说出两个进位异或判据 |
| 存储系统 | Cache 地址划分、平均访问时间 | 三步公式不缺项 |
| 指令系统 | 指令格式、寻址对比 | 访存次数不写错 |
| CPU | 流水线冒险、RISC/CISC 对比 | 三类冒险各有对策 |
| 总线与 I/O | 三总线分工、中断与 DMA | 抓住“是否经过 CPU” |
| 微程序与并行 | 微指令字段、并行层次 | 术语加一句限定条件 |
押题方向上,补码与浮点表示、Cache 地址划分、流水线冒险、中断与 DMA 对比这四类几乎每套卷子都会出现,优先把它们练到“提笔就能写步骤”。易错点那五条建议单独抄一页,考前只看那一页。
从那以后我每次带人刷这门课,都强制走一遍“先做、再比步骤、隔三天重做”的流程,因为血泪经验告诉我,对着答案点头是最容易产生“我会了”错觉的动作。希望帮到你。
本文还有配套的精品资源,点击获取