简介:《计算机组成原理》白中英第六版课后习题答案,面向计算机科学与技术专业学生、考研备考生及自学硬件基础的技术人员,用于解决教材习题缺少系统参考答案、核心概念难以闭环验证的学习痛点。资源仅含一个PDF文件,压缩包约3.97MB,体积轻量、下载便利,支持手机、平板及电脑多端阅读,也适合打印后逐章核对。当前已有13600人学习浏览,需求热度较高。解答覆盖数据表示与数制转换、运算器与ALU设计、存储系统与Cache层次、指令系统与寻址方式、CPU控制与微程序设计、输入输出与DMA、总线接口等核心章节,解题过程呈现关键步骤与推导思路。借助这份答案,读者可高效巩固课后练习,为操作系统、计算机体系结构等课程奠定扎实基础,是贴合课程学习与备考的实用资料。
1. 计算机组成原理课后习题答案的定位:从“看懂”到“做对”之间的那道坎
期末周把白中英《计算机组成原理》第六版从头翻到尾,最真实的感受是:课文能看懂,习题做不出来。尤其是补码运算、Cache地址映射和微指令编码这几块,对着答案也经常“看懂了但下回还错”。这份计算机组成原理课后习题答案资源,核心价值不是把题抄一遍,而是把数据表示、运算器设计、存储系统、指令系统、CPU结构、I/O与总线、微程序设计、并行计算这些章节的解题过程补全,让你知道自己究竟卡在哪一步。适合三类人:期末想刷题查漏的在校生、跨考或转码自学计组的备考生、以及想快速回忆核心考点的从业者。答案可以直接拿来对照,但怎么对照,决定了你是白抄还是真会。
2. 课后答案的正确打开方式:对答案、拆思路、做变式三种场景
拿到一份习题答案,最常见的用法是“做一道、抄一道”,这等于把答案当成了参考答案生成器,练的是抄写速度,不是解题能力。我拆这份资源的时候,反复试了几轮,最后固定下来的用法分三遍走,每一遍的目的完全不同。第一遍让答案当“裁判”,只负责告诉你对错;第二遍让答案当“老师”,把解题关节步骤拆开讲;第三遍让答案当“验收官”,用改过的参数重做,反过来核对结论。
2.1 第一遍:按章完整做一遍,答案只用来卡最终结果
先别打开答案,按教材章节顺序把课后题做一遍。做不出来的题不要死磕超过十分钟,在题号旁边画一个符号表示“卡住了”,比如三角形代表完全没思路,圆圈代表思路对了但算不出来。画完再做下一题,保持整章的完整性。这一遍结束后才翻开答案,只看最终结果,不看推导过程。
这么做的原因是,第一遍看推导会污染你的解题轨迹。如果你先看了答案里的中间步骤,大脑会顺着答案的思路走,误以为自己“本来就会”。我一般会把对的题直接划掉,把卡壳的题抄进错题本,同时特别注意那些“答案结果是一个很规整的数、而你算出的是带小数或带负号”的题目,这说明大概率不是算错,是题干某个参数被你理解偏了,这种题第二遍要重点拆。
第一遍的产出不是正确率,而是给第二遍圈定范围。一次做完一章,别做半章就翻答案,否则章节内的知识链是断的。比如存储系统那一章的习题,前面几道题在铺垫主存地址结构,后面几道题才落在Cache映射计算上,只做一半就提前看答案,铺垫部分就算白看了。
2.2 第二遍:拆思路,重点看“关键一步凭什么这么想”
第二遍只处理第一遍卡壳的题。把答案解析逐行拆开,标记出“已知条件→中间结论→最终答案”三段,然后问自己一个问题:中间结论这一步,凭什么从已知条件里冒出来?
举个例子,数据表示章节里常见的“已知[x]补=11010110,求x的真值”,答案可能直接写“符号位为1,负数;数值位取反加1,得x=-42”。但真正的关键一步是:符号位不参与数值位的取反加1,两个片段要分开处理。很多学生在这一步直接把整个字节取反加一,得到正数42,符号直接颠倒了。答案里这一行被我省略时,你就要自己补回来:先圈出最高位当符号,剩下的七位才是数值位。
拆思路阶段,我一般会在答案旁边补两行字:一行写“这一步用了哪个规则”,比如“负数补码转真值:数值位取反加1,符号位不参与”;另一行写“如果题目改一位数字,这步还成立吗”。第二行是在逼自己找到步骤的边界条件。这一步是整套资源里最有价值的部分,因为课后习题的答案通常只给推导链,不给“为什么在这个位置转弯”,需要你自己把转弯的理由补在纸边。
2.3 第三遍:变式重做,用答案的结论反向核对
第三遍是拉开差距的用法。选第二遍拆过的题,改一个参数重新做一遍。改动幅度别太大,保证题型结构不变,只是数值或位宽变化,这样答案里其他同构题的最终结果可以直接当参照。
举例来说,原题是“某机器字长8位,用补码表示,求最小负数的补码与真值”,答案为10000000和-128。变式就改成字长16位,答案应该对应着数据表示章节里另一道关于-32768的同构题。做完后对照那道同构题的结果,看你推导出的1000000000000000是否与之一致。这种互验方式不依赖题目答案本身,而是用答案资源里的题型分布来兜底。
下面这张表是我按章节整理的“答案最值钱的部分”,拆答案时优先看这些位置。
| 章节主题 | 典型题类型 | 这套答案里最值钱的部分 |
|---|---|---|
| 数据表示 | 补码加减、溢出判断、浮点数规格化 | 符号位与数值位分开处理的推导过程 |
| 运算器设计 | ALU功能、原码一位乘、加减法运算 | 每一步部分积和寄存器状态变化 |
| 存储系统 | 主存地址划分、Cache容量计算 | 地址字段先列位数再画映射关系的步骤 |
| 指令系统 | 指令格式设计、寻址范围计算 | 由指令条数反推操作码位数的口径 |
| CPU结构 | 微操作序列、流水线冲突 | 每个时钟周期控制信号的时序表 |
| I/O系统 | 中断响应顺序、DMA传送时间 | 先算数据准备时间再算传送时间的顺序 |
| 微程序设计 | 微指令格式、编码方式 | 水平/垂直微指令的位分配对比 |
| 并行计算 | Amdahl定律、多处理器加速比 | 加速比公式先代入后化简的完整过程 |
第三遍做完,这套答案才真正算你的东西。前两遍是往里装,第三遍是往里长。
3. 九大主题题眼逐个过:数据表示、存储、指令、CPU、I/O 与并行
课后题看起来有几十道,实际题眼高度集中。把白中英第六版各章的题眼拆开看,复习效率比整章重读教材高得多。下面按高频考点顺序逐个过,每个主题给出判定标准和典型推导链。
3.1 数据表示与ALU:补码加减的溢出判定是年年必考
数据表示这章,原码、反码、补码、移码之间的转换是基本功,真正拉分的是补码加减的溢出判定。判定标准就一句话:最高位进位与次高位进位做异或,结果为1则溢出。很多学生记成“符号位进位就是溢出”,实际上两个进位都是1时,结果是正确的负数,不溢出。
看一道典型的4位补码运算:0111+0001=1000。次高位(第2位)没有进位,最高位第3位有进位,异或结果为1,判定溢出。结果1000按补码读是-8,而正确的7+1应该等于8,超出4位补码范围,确实溢出。反过来,1011+1101=1000,次高位和最高位都有进位,异或为0,不溢出,结果-8是(-5)+(-3)的正确值。
答案里经常只写“溢出”或“无溢出”,不写判定过程。复习时把每一道溢出的题都补上“C1和C2异或”这一行,这套动作会变成肌肉记忆。ALU部分同理,加法器、减法器、逻辑运算的题,本质上都是“输入选择—运算—输出标志位”三段,答案里最值得看的是标志位(Z、C、V、S)在什么条件下被置位。
3.2 存储系统:Cache地址划分的三段式套路
Cache相关习题的题眼集中在地址字段划分上。无论直接映射、全相联还是组相联,解法都是同一个三段式:先算块内地址位数,再算行号或组号位数,最后用主存地址总位数减去前两段,得出标记位数。顺序不能乱,一旦先算标记位,后面全乱。
举教材里最典型的一类题:“某计算机主存地址32位,Cache有64行,每行4字,字长32位。直接映射方式下,标记字段几位?”第一步,块内地址位数=log2(4)=2位;第二步,行号位数=log2(64)=6位;第三步,标记位数=32-2-6=24位。全相联映射没有行号字段,标记位数变成30位;组相联则把行号换成组号,组数等于行数除以每组行数。
这道题的错误高发点有两个:一是把“每行4字”的“字”和“字长32位”混在一起,被多于的位数干扰;二是题目改成字节编址后忘了在块内地址里多算字节偏移。白中英第六版的课后答案一般会直接给出字段分割图,没有图上文字时,我一般会自己在旁边重画一遍那段“标记+行号+块内”的结构,画完再往下做题。地址映射的三种方式对比,整理成表格更清楚:
| 映射方式 | 地址分割 | 行号/组号计算 | 典型判定线索 |
|---|---|---|---|
| 直接映射 | 标记+行号+块内 | 行号位数=log2(Cache行数) | 题干出现“直接映射” |
| 全相联 | 标记+块内 | 无行号字段 | 任意主存块可进任意Cache行 |
| 组相联 | 标记+组号+块内 | 组号位数=log2(行数/组内行数) | 题干出现“几路组相联” |
存储系统这一章还常考DRAM刷新周期计算。答案里通常用刷新周期=总存储单元数/每次刷新单元数,再乘以刷新间隔,注意第六版教材口径里刷新计数单位是“行”,不是“位”,这一点我见过很多人栽在上面。
3.3 指令系统:从指令条数反推操作码位数
指令格式设计题是每章必有的“项目题”,给一堆条件让设计指令格式。核心套路是先确定操作码位数,再确定地址码位数,最后按不同寻址方式算寻址范围。操作码位数由指令条数决定,固定长度操作码时要向上取整,比如15条指令就得用4位操作码。
一道常见题:“某机指令字长16位,操作码4位,地址码由寄存器号3位和形式地址9位组成。求该指令系统最多有多少条指令、寄存器寻址最多识别的寄存器数、以及直接寻址的寻址范围。”答案分别是16条、8个、512字节。每步都是一次简单换算,但很多人在最后一步把“9位形式地址”直接说成“寻址范围512字节”,忽略了教材里数据宽度与编址单位的换算关系。
这道题还有一个变种:问“如果在指令中增加寻址方式字段,操作码位数如何变化”。答案是新增寻址方式字段会挤占地址码位,或者压缩操作码位数。答案里对这类问题的处理,通常给出两套方案对比,一套牺牲寻址范围,一套牺牲指令条数。记住“任何指令格式改动都在三个成分之间做零和博弈”,这一章就不会翻车。
3.4 CPU结构:微操作时序与流水线冲突
CPU结构这章的高频题有两类:一是单周期或三周期内指令的微操作序列,二是流水线的冲突处理。微操作序列题的标准解法是给每条指令列一个表格,行是周期,列是寄存器操作,然后在同一周期内检查是否有两个微操作争用同一个总线或同一个寄存器。
答案里微操作序列常被压成一行,比如“R1←M、R2←PC、PC←PC+4”,看起来三个操作一个周期完成,实际是要看硬件支持几条总线。若只有一条总线,这三步必须拆到三个周期。我一般会在答案旁边标出每个微操作占用的总线号,标完就知道哪些步可以合并,哪些不能。
流水线冲突是另一个稳定考点。结构冲突靠硬件冗余解决,数据冲突靠转发或暂停,控制冲突靠分支预测。课后题常出的场景是“两条相邻指令存在寄存器依赖,不使用转发的代价是什么”,答案一般是插入两个空泡,CPI增加2。判断数据冲突的快速方法是直接找两条指令的目标寄存器与源寄存器是否重名,重名就是RAW冲突。第六版教材里这部分答案多数用图形化表格呈现冲突周期,照着表格自己在纸上画一条带空泡的流水线时间图,比背结论有用。
3.5 I/O、总线、微程序与并行:DMA、微指令编码、Amdahl定律
I/O系统题眼集中在中断和DMA的时序计算。中断响应流程的固定顺序是:关中断→保存断点→识别中断源→转中断服务程序→保存现场→执行服务→恢复现场→开中断→返回。课后题爱考“在哪个步骤响应更高优先级的中断”,答案通常指向“执行服务期间开中断”的环节。
DMA题的标准考法是“周期挪用后CPU受影响程度”,先算外设每传送一个数据块需要多长时间,再算这块时间里占用了多少个总线周期。答案里常省略“外设预处理时间”这一步,直接进入传送时间计算。实际上要先判断题目给的是“磁盘读一块数据需要多久”还是“从磁盘读入内存需要多久”,两者相差一个寻道等待时间,代入公式后结果完全不同。
微程序设计部分,水平微指令的题眼是“每条微指令能并行执行多个微操作”,字段数多,微指令长;垂直微指令每条只含一个微操作,字段少但需要更多微指令条数。课后题经常给一张微指令格式表,要求指出哪些字段控制哪些部件。答案里的关键信息是译码后的控制信号一对一对应硬件部件,地址字段单独分出来,这个划分逻辑才是考点本身。
并行计算压轴的是Amdahl定律:加速比=1/((1-F)+F/S)。F是可并行部分占比,S是并行部分的加速倍数。课后题常给F=40%、S=10,代入得到加速比1/(0.6+0.04)=1.5625。很多人错在把F理解成“被加速部分的占比”,实际上F是“可以被并行化的时间占比”,二者在题目里的描述只有一字之差。第六版答案在这些题上通常用分步代入而不是直接给结果,照抄前先自己推一遍,效果完全不同。
4. 避坑与常见问题:对答案时最容易翻车的五个细节
这套答案资源用了几年,我见过的问题集中在这五类上。每一条都是真实踩过的坑,写出来你对照自查,能省下几个小时的无用功。
4.1 版本不对照:章末题号对不上、内容还在上一版
现象:你翻开第六版教材第三章节末习题,第5题是一道Cache计算题,但手里的答案在第三章第5题的位置放的是微程序设计的题,完全对不上。
原因:白中英教材在第六版修订过程中调整过部分章节顺序,尤其是“存储系统”和“CPU结构”两章的习题多次微调。网上流传的很多答案文件其实是第五版或更早版本的扫描件,只是文件名写成了第六版。
解决:用答案之前先做“版本体检”——抽考三道题:数据表示章节任意一道补码题、Cache章节任意一道地址划分题、I/O章节任意一道DMA题,如果三道都吻合,才说明这份答案和你的教材同版。如果有一道对不上,就放弃按章节对应,改为“按题找答案”,用题面关键词反向搜,哪一题和你的教材题干相同,才采纳哪一题的结果。
4.2 推导过程被“精简”了:补码乘法和恢复余数除法缺关键步
现象:运算器设计一章的补码一位乘,答案直接从“初始部分积为0”跳到“最终部分积=某十六进制数”,中间校位、加数、右移几步全都没有。
原因:不是这份答案单独的问题,印刷版习题解答为了控制篇幅,经常省略重复性步骤。可补码乘法的每一步右移都会改变符号位,省掉中间步等于把最重要的边界条件藏起来了。
解决:遇到被精简的推导,用答案的最终结果反推验证。把最终结果转成真值,和题目给出的被乘数、乘数手动相乘的结果比对,能对上就说明跳过的是常规步骤,对不上则要回到教材做一遍完整的Booth算法流程。补码乘法的核心规则一句话:部分积加的是被乘数或0,右移时符号位保持不变。任何时候推导中断,回到这句规则重新走。
4.3 口径不一致:Cache映射与教材正文用不同方案
现象:同一道Cache题,教材正文用的是直接映射,答案却按全相联映射计算,或者主存地址位数在教材里是20位,答案用32位。
原因:第六版教材部分图表沿用了旧版插图,而课后答案按新版文字重新计算,两套口径在个别章节共存。存储系统和微程序这两章最容易出现“正文一个口径、习题答案另一个口径”。
解决:以教材正文的公式为准,把答案当作参考解而不是唯一解。遇到不一致时,先把题干里有明确数字的参数列出来——主存地址位数、Cache行数、块内字(字节)数、组内行数,这些参数确定后映射方式就能锁定,答案里出现不同参数组合时,按教材正文的参数重新算一遍。我的习惯是在答案页眉写上“本页与教材第某页口径一致/不一致”的标记,下次复习不用再重新排查一次。
4.4 对着答案抄一遍,第二天照样不会做
现象:做一道题,翻开答案看懂了步骤,合上答案自己重推,卡在同一个位置。
原因:看懂答案说明你的阅读能力没问题,但解题能力需要的是“在没有任何提示的情况下重新组织步骤”。对照答案的过程只激活了识别回路,没有激活生成回路。
解决:给自己加一道强制工序:每道题看完答案后,不立刻翻下一页,先在草稿纸上把答案合上,凭记忆重写一遍关键推导。写不出来就再看一遍,再重写,直到能完整默写出中间步骤。这个过程通常只需要两遍,却决定了你看的答案能不能变成你会的解法。从那以后我每次复习计组都强制自己走一遍这个流程。
4.5 交叉验证缺失:一道题多个版本答案,不知道该信谁
现象:同一道关于DRAM刷新周期的题,A份答案算出104微秒,B份答案算出128微秒,两份答案的公式推导过程看起来都合理。
原因:差异通常出在“刷新间隔按行算还是按整个芯片算”这个口径上。第六版教材把刷新的基本单位定义为“一行”,而部分解答按“整个存储矩阵刷新一次”来计算,导致结果差一个大迭代周期。
解决:先看教材正文的例题,找到和课后题最接近的那一道,按例题的公式重算。如果教材里用的是“刷新周期=刷新间隔/每行刷新时间”,那课后题也应沿用这个口径。如果两份外部答案和教材公式都不一致,说明这个题存在版本历史遗留问题,优先采用和教材例题同口径的那份。把“版本差异”四个字写在错题本上,避免复习时摇摆。
5. 两轮复盘闭环:用答案把错题变成长记性的资产
课后题做一遍就丢,等于把一份好资源用成了临时的“校对工具”。真正让分数涨上去的,是用答案把错题整理成一套可迭代的复盘闭环。核心是两轮处理加一个回填动作。
5.1 第一轮:A/B/C三道标记法把错题分类
做完一章并对完答案后,把错题分成三类。A类是完全没思路,看到题目不知道从哪个知识点入手;B类是思路对但算错,比如Cache地址划分时块内地址位数少算一位;C类是概念性模糊,比如把“DMA传送前需要CPU预置参数”和“中断需要CPU保存断点”混在一起。
分类依据不是“错得多严重”,而是“卡在解题链的哪一环”。A类说明知识在大脑里没有形成检索路径,B类说明计算习惯有缺陷,C类说明概念边界不清。我用一张表记录这些错题,字段如下:
| 错题位置 | 题干关键词 | 错误类型 | 卡壳位置 | 答案中的关键步骤 | 是否已重做 |
|---|---|---|---|---|---|
| 3.2节 第7题 | Cache直接映射 | B类 | 块内地址写成4位 | 2位块内、6位行号 | 是 |
| 5.3节 第2题 | 流水线数据冲突 | A类 | 未识别RAW依赖 | 目标寄存器与源寄存器重名 | 否 |
这张表填满十行,错误类型分布会告诉你复习优先级:如果B类居多,重点练计算精度;如果A类居多,说明要先回教材看对应知识链路,而不是继续刷题。
5.2 第二轮:把错题改参数重做
第二轮在三天后进行,规则是“不看答案、不翻原题,只改参数重做”。A类题改成数字更简单的等价题,B类题把关键数字换掉,C类题则换成同概念的另一道题。改完参数的重做题,解题步骤必须完整写出来,不能心算。
比如原题是“64行Cache、4字每行、主存地址32位、直接映射”,重做时改成“128行Cache、8字每行、主存地址32位、直接映射”。块内地址位数变成3位,行号位数变成7位,标记位数变成22位。做完之后,翻开原题答案的同类题,对比最终字段位数是否吻合。这一步就是第2章第三遍用法的正式版:用答案当“验证器”,而非“提词器”。
B类重做的附加要求是:把每一步的位数写在算式后面,比如“字块内地址log2(8)=3”。这能强制你在计算过程中保留单位,而不是把一堆数字混在一起最后得出一个无法验证的结果。C类重做则要把两个混淆概念用一句话写清楚,比如“DMA偷总线周期,CPU暂停但不保存现场;中断是CPU主动响应,需要完整保存现场”。
5.3 知识链回填:从一道题反查教材图表找出概念断点
复盘的最后一步是把错题回填到教材的知识结构里。如果一道Cache计算题反复错,错的往往不是计算本身,而是主存地址结构的图没画对。回填动作就是回到教材存储系统那一章,把“主存地址=标记+行号+块内”的结构图重新画一遍,然后标出你之前漏掉的是字段还是位数。
回填的对象优先选教材里的图和表:地址划分图、指令格式图、流水线阶段图、中断响应流程图。我做回填用的表格很简单:
| 错题涉及的教材图表 | 我漏掉的知识点 | 回填后一句话记忆 |
|---|---|---|
| 图X.X Cache地址划分 | 块内地址位数先算 | “先块内、再行号、标记是剩下的” |
| 图X.X 中断响应流程 | 关中断在保存断点之前 | “中断全程只有关中断这一处是不可被打断的” |
| 表X.X 微指令编码 | 水平微指令并行微命令多 | “水平长、垂直短” |
回填完成后,整章的知识链才真正闭环。时间紧张时,按“数据表示→存储系统→CPU结构”的优先级先处理这三张回填表,它们是后续操作系统、编译原理课程的地基。指令系统和I/O的坑大多能靠这三章的基础排除掉。
6. 进阶用法:把答案当教辅大纲,反向圈出教材考点
最后一层用法是反向看答案。别只把它当作一道一道的题解,把整份答案的目录当成“考点频次表”来读——练习题最多的章节,往往就是教材考核最重的章节。数据表示、存储系统、CPU结构这三章如果答案页数明显比其他章节厚,复习重心就明确压向这三块。
具体技巧是“自出一题”。每复习完一章,仿照课后题题型,自己修改条件出一道新题。比如教材考“64行Cache直接映射求标记位数”,你就改成“128行4路组相联求标记位数和组号位数”。如果出题时不知道怎么改,说明这一章的考点结构还没吃透;如果出完题能立刻给出计算过程和结果,并且能从答案资源里找到同构题核对,这一章才算是闭环了。我常用的验证标准是三天后不看答案重做原题,一次做对才算真正掌握。
我以前复习计组全靠翻教材,以为看懂就行,结果一到考场就卡在补码溢出那道题上。从那以后我每次用这套答案资源都强制走一遍“先做题、再拆答案、后变式重做”的流程,让答案从抄写模板变成了训练工具。这份计算机组成原理课后习题资源可以直接拿去对照复习,希望帮到你。
本文还有配套的精品资源,点击获取