☰
计算机组成原理第三版习题答案:补码、存储器扩展与流水线推导验证
2026/10/15 13:32:31 网站建设 项目流程

简介:面向计算机专业本科生与考研复习者的《计算机组成原理(第三版)》习题答案文档,内容围绕数字计算机基本结构、存储器与CPU工作机制、系统软件层次及二进制运算等核心知识点展开。资源为1个doc文档,压缩包约2.8MB,适合配合教材逐章对照学习,也可用于考前集中刷题与查漏补缺。目前已有5352人学习下载。文档从模拟计算机与数字计算机的区别切入,逐步讲解存储程序通用计算机模型、指令与程序执行、内存与外存、系统软件与应用程序、机器语言到高级语言的演进,以及原码、补码、反码、移码和浮点数表示等易考点;每道习题均给出较为明确的解答思路,可帮助读者快速定位薄弱环节,加深对计算机硬件系统原理的理解。

1. 为什么“计算机组成原理(第三版)习题答案”值得你花两份时间

“计算机组成原理(第三版)习题答案”这个标题,初看是理工科资料里最不值钱的那一类:教材卖得火,课后题答案网上随手一搜就能找到,下载、对题、抄完、合书,一条龙。但如果你真的只拿它来“对答案”,你差不多把这份资源里最值钱的部分全扔了。第三版课后题相比老版本,章节排布更碎、题号和图表编号几乎全部重排,一份和章节一一对应的答案,实际上是一张覆盖全书各章的考点地图。它适合三类人:自学到第五章开始犯迷糊的初学者,期末或考研前需要系统过一遍的复习者,以及想把课后题改成自己练习题的在校生。这篇笔记不打算复述某道题的答案内容,而是要教你一套核对答案、验算过程、避免误用答案的方法。

2. 把“答案”还原成“推导链”:三个高频题型的完整拆解

答案给的是“结果”,但考试要的是“过程”。我见过的大多数翻车现场,都不是题不会做,而是结果对上了、过程经不起推敲。所以这一章我拿三个出现频率最高的题型做示范:数的表示与溢出判断、存储器字位扩展、流水线冲突分析。每个题型都从教材定义出发,给出做题顺序和一个独立的验证视角。你拿第三版习题答案去对照时,重点看我标注的那条推导链,而不是最后那个数字。

2.1 数的表示与溢出判断:先把“取反加一”换成“按位权展开”

补码的经典口诀是“取反加一”。很多答案里直接写“10000000B = -128D”,初学者心里容易犯嘀咕:不是按“取反加一”算出来应该是“-0”吗?问题就出在口诀只告诉你操作步骤,没告诉你权重。补码的最高位是符号位,但它的权重不是0,而是-2^(n-1)。也就是说,一个8位补码 b7 b6 b5 b4 b3 b2 b1 b0 的真值是:

真值 = -b7 × 128 + b6 × 64 + b5 × 32 + b4 × 16 + b3 × 8 + b2 × 4 + b1 × 2 + b0 × 1

把10000000代进去:-128 + 0 = -128,而不是“-0”。把11111111代进去:-128 + 127 = -1。这就是“取反加一”背后的真正逻辑。第三版习题里有大量这种“给出二进制串、求真值”的题,答案里只有结果,推导链其实是这张权重表。

溢出判断是同一类题里的第二层。加法溢出判据不是“结果是不是太大”,而是符号位进位和次高位进位是否一致。设C1为次高位向符号位的进位,C2为符号位向外的进位,C1和C2不同,则溢出。举一个常考的8位例子:

  • 01111111 + 00000001:次高位相加产生进位(C1=1),符号位相加没产生进位(C2=0),C1≠C2,溢出,结果10000000,按补码读是-128,显然不对,127+1不可能等于-128。
  • 11111111 + 11111111:低7位相加产生进位(C1=1),符号位相加也产生进位(C2=1),C1=C2,无溢出。结果11111110,真值是-2,合理。

对照答案时,不要只看末位数字。我习惯在草稿纸上把C1和C2单独写出来,答案说溢出但我算出来没溢出,第一件事就是检查这两个进位是不是被我看丢了。

还有一个经常被忽略的隐含前提:第三版习题里大量出现“两个8位二进制数相加”这种写法,题面没提“补码”还是“无符号数”,答案默认按补码处理。如果按无符号数看,01111111 + 00000001 = 10000000,也就是128,完全合法、不溢出。同一道题的结论完全相反。我给自己定了个规矩:动笔之前先写一行“此题默认:补码,字长=8位”,答案对不上时先检查这行话。

2.2 存储器字位扩展:把每个芯片的地址范围写在纸上

存储器扩展题是第三版课后题里占篇幅最大的一类,常见问法:用某容量芯片组成某容量存储器,问需要几片、画连线图、写出每片芯片的地址范围。答案往往只给“4片,地址范围 xxxH~xxxH”,但过程里最关键的一步是对地址线的分配,这一步丢了,结果就是背数字。

做这种题,我从来不直接心算,而是先在纸上画一张表。表头是“芯片编号、片内地址线、高位片选线、起始地址、结束地址”。以 2K×8 芯片组成 8K×8 存储器为例:2K=2^11,片内地址用 A10~A0;总容量 8K 需要 13 根地址线 A12~A0;剩下 A12、A11 两根作为高位片选。4 片芯片分别对应高位地址 00、01、10、11,于是地址范围就是:

芯片高位 A12~A11起始地址结束地址
1000000H07FFH
2010800H0FFFH
3101000H17FFH
4111800H1FFFH

很多第三版习题答案里直接用 74LS138 译码器的 Y0~Y3 输出表示片选,结果写成“第1片 0000H~03FFH”这种缩小了的范围。如果你没把高位地址写进去,就会觉得答案和自己算的对不上。记住一句话:位扩展加数据线、不加地址线;字扩展加地址线、不加数据线。两类扩展同时做时,先把位扩展的片数乘掉,剩下的全是按字扩展分配地址。

我踩过的一个具体问题:把“2K×8 组成 8K×8”看成了“2K×8 组成 16K×8”,地址线多算一根,结果所有芯片的起始地址整体左移。答案差得不多,但对照时始终差一段。最后翻回题面才发现,总容量 8K 是 2^13,不是 2^14。这种错误靠“感觉”查不出来,只能靠重新数一遍地址线根数。

2.3 指令流水线的三类冲突:用“依赖→停顿→旁路”三步看答案

流水线题是第三版新增内容里最容易被答案“带偏”的部分。原因很简单:同样的指令序列,在不同教材的实现方式下,停顿位置可以不一样。第三版常见的出题方式是给一段 4~6 条指令的序列,问哪些指令之间发生冲突、需要插入几个停顿周期。答案里可能直接写“第3条指令前停顿2拍”,你要能反推它背后的判断顺序。

我的判断顺序固定为三步。第一步看数据相关,重点是写后读(RAW)依赖:后一条指令的源操作数,恰好是前一条指令的目标寄存器,且前一条指令还没写回,这是流水线最常见的冲突。第二步看结构相关:两条指令是不是要在同一拍里争用同一个部件,典型例子是访存指令和取指共用一个存储器。第三步看控制相关:遇到分支指令时,分支判断结果在哪个阶段产生,决定了后面几条指令要不要清空。

以第三版最常见的五段流水线IF、ID、EX、MEM、WB为例,一条指令在ID阶段读取寄存器,在WB阶段才写回寄存器。两条紧挨着的指令如果前者写r1、后者读r1,后者的ID阶段发生在更早一拍,它读到的还是旧值,于是冲突发生。答案里说“停顿1拍”,对应的就是让前一条指令的WB结果能被后一条指令读到。如果教材允许旁路转发,很多题目的停顿周期可以直接降为0,这就是为什么同一道题在不同参考书里答案不一致的根本原因。

自己做题时,画一张横向时空表,把每条指令的周期占位写成一排,一格代表一拍。哪个格子重叠,哪个格子读到旧值,一眼就能看出来。对照答案时,先看它有没有开启旁路,再看停顿位置在哪一拍,最后才看最终周期数。顺序反了,你很容易得出“答案错了”的结论,其实是你自己少画了一列。

这三个题型覆盖了第三版课后题将近一半的分值。做完每一道题,盖住答案把推导链重新走一遍,你花的时间不会增加太多,但对答案的理解会从“结果正确”升级到“过程可控”。

3. 给自己搭一个“验算工作台”:把答案从“背书”变成“算出来”

我一直保留一个习惯:不直接信答案里的数字,而是把题目的参数重新输进一台“验算机”,让结果自己跑一遍。对正确的题,它帮我省掉重新抄一遍的时间;对可疑的题,它是“答案错了还是我错了”的裁判。下面这个几十行的Python脚本,是我针对补码、存储器容量、流水线停顿这三类最常见小题写的验算工具,结构很小,但能挡掉一半以上的低级误解。

3.1 一个几十行的Python验算脚本:补码计算与溢出判断

下面这段脚本解决两个问题:一是把补码串按位权展开成真值,二是在此基础上判断两个补码相加是否溢出。它不是给考试用的,而是用来验证你在纸上做出来的答案。

def two_comp_true_value(bits): """把二进制补码串转成真值,按位权展开,而不是简单用取反加一""" n = len(bits) val = 0 for i in range(n): if bits[i] == '1': if i == 0: val -= 2 ** (n - 1) # 符号位权重为负 else: val += 2 ** (n - 1 - i) return val def add_and_check(a_bin, b_bin, n=8): """两个补码串相加,并返回真值结果和溢出标志""" if len(a_bin) != n or len(b_bin) != n: return "位宽不匹配,请先补全到 %d 位" % n a_val = two_comp_true_value(a_bin) b_val = two_comp_true_value(b_bin) int_a = int(a_bin, 2) int_b = int(b_bin, 2) raw_sum = int_a + int_b # C2:符号位向外的进位,即结果超过 n 位二进制能表示的范围 c2 = 1 if raw_sum >= (1 << n) else 0 # C1:次高位向符号位的进位,用低 n-1 位相加是否产生进位判断 mask_low = (1 << (n - 1)) - 1 c1 = 1 if (int_a & mask_low) + (int_b & mask_low) >= (1 << (n - 1)) else 0 overflow = (c1 == 1) != (c2 == 1) result_bits = bin(raw_sum & ((1 << n) - 1))[2:].zfill(n) result_val = two_comp_true_value(result_bits) return a_val, b_val, result_val, overflow print(add_and_check("01111111", "00000001")) print(add_and_check("11111111", "11111111"))

逻辑说明:two_comp_true_value从逐位权重出发还原真值,符号位(第0位)按负权重处理,这样直接覆盖“10000000 = -128”这类容易记混的边界情形。add_and_check里先按无符号数相加,再分别提取次高位进位C1和符号位进位C2,C1和C2不一致时置溢出标志。脚本返回的四元组里,result_val是回代验证的结果——如果溢出标志为真,这个数值会明显偏离直观预期,提示你回到原题检查前提。

参数说明:n默认取8,对应第三版习题里的大多数题目;改成16就能直接验算16位字长的题。a_bin和b_bin必须是等长的补码串,不含0x前缀。跑第一组例子返回(127, 1, -128, True),对应 127+1 溢出的标准结论;第二组返回(-1, -1, -2, False),-1+-1 合法。如果你计算的恰好是这两类边界的组合,对照答案前先跑一次,能省掉一整晚的无效核对。

提示:这个脚本验证的是补码加法溢出。如果题目明确写“无符号数加法”,溢出判断标准完全不同,请改成检查raw_sum是否大于2^n - 1,不要套用符号位进位。

3.2 用“位宽-地址-周期”三看快速核对题号对应的答案

答案对不上时,第一反应不要是“答案错了”,而是先回题面做三个参数的三看检查。我把它们列成一张表,按顺序查:

核对项要看的位置最常见的翻车点
位宽题面是否写“字长8位/16位”没写就默认教材约定;十六进制数直接当二进制拼位
地址片内地址线和片选线如何分配位扩展与字扩展混算;地址范围少算一位地址线
周期时钟沿与流水线段数忘了“是否启用旁路”这个前提,停顿周期差2拍

具体做法是每次拿到一道题,先花10秒把这三个参数写在题目旁边再动笔。这三个参数是第三版课后题里最容易在题干中被“带过”的信息。比如“某存储器用 4K×8 的芯片组成 16K×8”,这里片内地址是 A11~A0,片选需要 2 根线,如果你漏数成1根,后面的所有地址范围都会错位。

我辅导过一位A同学,他反复出现“对完答案总差一项”的问题。最后发现,他每次都是直接看答案的地址范围,而不看题面给的容量。后来他按“位宽-地址-周期”三看顺序重新做,一周内对照错误率下降了近八成。这个检查顺序的价值在于:它把“对答案”从模糊的直觉比较,变成了三个可勾选的核对项。

3.3 发现答案疑似有误时,按“原题参数→教材定义→手册约定”的核对顺序

答案也会错,但怀疑答案之前要有一个固定的核对顺序。第一级回到原题:题面里的字长、使能信号高低电平、芯片容量是否漏看,这一级能解决八成的不一致。第二级翻教材定义:溢出判据用的是“符号位进位与次高位进位异或”还是“结果符号位与操作数不同”,流水线冲突按五段式还是四段式,教材的附录和正文一定有明确定义。第三级才轮到怀疑答案本身印刷错误或版本混排。

第三版习题册偶尔会出现“沿用上一版答案、题号错位”的情况。特征是过程的每一步都是对的,和教材定义也对得上,但解的题和第三版印刷的题面参数对不上。这时候我才会在题目旁边标注“按第三版题面参数,此答案对应旧版第X题”,而不是直接把答案数字抄上去。

这一步做完,你对“对答案”这件事的掌控力就变了:你不再被动接受结果,而是有了自己的验证节奏和仲裁依据。

4. 对答案过程中最常见的五个“坑”:现象、原因与解决

把几份往届同学的复习笔记放在一起对比时,答案被误用的情况惊人地一致。这里选五个重复率最高的坑,按“现象→原因→解决”写清楚。你对照自己现在的习惯,每停掉一个,复习效率都能提一档。

4.1 对完答案就合上书——你得到的是“我已经会了”的错觉

现象:A同学把一本第三版课后题从头对到尾,耗时三天,过程顺畅,自我感觉良好。合上书重新做,能做对的不足一半。

原因:对答案的动作是“被动接收”,结果从眼睛流进大脑,没有经过推导链,记忆停留在“看过”而不是“能用”。尤其选择题和填空题,答案就在手边,大脑会自动滑向“哦,原来是这样”,而不是“我能不能推出来”。

解决:改成“先闭卷做,再翻答案”。给自己立个规矩:不写出完整过程就不允许翻答案。写不出来的题先标记,翻答案后隔天必须重做一遍。这个过程没有捷径,但能把记忆留存率从“三天后归零”提到“一周后仍能做对”。

4.2 拿第三版答案去核对第二版的习题题号,怎么对都是错

现象:同样是第4章第3题,第二版在第三版里变成了第5章第2题,甚至换了个主题。硬套答案的结果是题目和解析牛头不对马嘴。

原因:第三版章节排布更碎,新增了流水线、Cache等内容后,原有习题被大量重新编号。很多二手资料网上流传的仍是旧版答案,不核对版本就开始用,自然全乱。

解决:第一步,看答案的目录是不是和第三版教材目录完全一致包括“第几章”这种层级;第二步,做一道题前,先对题号,再对题目里的参数,题号对不上就不要往下看。顺手把教材扉页的版次编号记下来,购买或下载资料时先对齐版次。

4.3 忽略了题面里“未说明”的隐含前提,答案怎么读都不顺

现象:题面写“两个8位二进制数相加”,答案给出“溢出”。你自己按无符号数算,怎么算都不溢出,于是觉得答案有误。

原因:计算机组成原理这门课的默认语境里,没特殊说明的二进制数加法通常按补码处理。教材章节标题本身就是约定,离开章节语境做题,容易把“无符号数”当成默认。

解决:动笔前先写一行“默认前提:补码、字长8位”,这和我在第2章里的做法一致。写完再做题你会发现,答案的推导链一下就顺了。这一条是五大坑里性价比最高的一个解决项,因为它几乎不花时间,却能消除大半的“答案对不上”。

4.4 同一道题在多份资料里有不同答案,陷入“哪个对”的纠结

现象:你的参考书给了一个结果,同学笔记给了另一个结果,网络版本又给了第三个,三个都有理有据。

原因:有的差异来自教材实现方式不同——比如流水线是否开启旁路,决定停顿周期是0还是2;有的是旧版答案混入新版资料;还有的确实是“两种解法都对”,因为题目没有要求最优解。

解决:按第3章的验算工作台跑一遍。先用脚本把自己的结果算出来,再倒推谁的过程算出来和你一致。都不一致时,以第三版教材正文的定义为准。我自己的原则是:教材定义优先于参考书,参考书优先于网络版本,永远不要用“多数人写什么”来决定对错。

4.5 只改数不修过程——“黑匣子”越养越大

现象:某次对完答案,发现有两个数值错了,直接拿起笔把答案里的数字抄到自己的算式末尾。下次遇到同类型题,过程还是断的,照样错。

原因:把答案当成“黑匣子”,只看输入和最终输出,中间的每一步推导都没有被核对。黑匣子越养越大,最后你对自己写过的过程完全没有信任感。

解决:把答案里每个中间结果都划出来,对照自己过程的每一步。中间某一步对不上,说明公式用错或顺序颠倒,这时候修正过程,而不是修正数字。我自己的做法是打印一份答案,在每个等号后画一条竖线,标注“这一步来自什么公式”或“这一步来自教材第几页”。这个动作比抄十遍答案都管用。

5. 更进一步:把“习题答案”改造成你自己的“题目生成器”

“常看答案的人,最后会失去编题的能力。”这句话反过来也成立:会编题的人,看答案的速度快三倍。第三版习题答案的最后一个用法,是拿它当母题库,把数值换掉、约束换掉、场景换掉,生成一套只属于你自己的练习题。我把这个办法叫“参数替换改题法”,做法是把每道题里的可替换参数找出来,逐项替换,考点不变但数字全变。

原题参数改题参数改动后新增的考查点
8位补码运算16位补码运算符号扩展、更高位溢出判定
2K×8 芯片组 8K×84K×8 芯片组 16K×8地址线根数变化后的片选分配重算
五段流水线六段流水线停顿插入位置随段数变化
直接映射Cache两路组相联索引位、块内偏移位数重算
单总线结构双总线结构同一周期内允许两次传输的时序变化

具体做法:挑第三版每一章的压轴题,把它当成“母题”,先改参数,再盖住原答案,自己把新题做一遍。第二天对答案时不看原题的推导,只核对“参数替换后的关键结论是否一致”。哪里卡住,说明哪个考点还没吃透。有一个细节:改题时记得把原题答案里依赖的“默认前提”一并改掉,比如把8位改成16位后,溢出判断的边界就要重新算,不能直接沿用旧结论。

我自己的习惯是,每学完一章从课后题里抽三道做参数替换,存成一个小练习集。考前只做自己改的新题,做完再打开第三版答案核对,效果比反复看原答案好很多。这个方法听起来有点玄学,但本质很简单:逼你从“看懂别人的推理”升级到“自己重新走一遍推理”。对自己生成的题目不满意?那说明你还没真正吃透这道题背后的全部考点。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询