☰
计算机系统概论第一章习题答案:寄存器、指令周期与补码核心解析
2026/10/14 1:34:13 网站建设 项目流程

简介:《计算机系统概论(原书第二版)》第一章习题答案以 PDF 文件形式整理了教材配套的精选解答,面向正在学习计算机系统原理的本科生、考研复习者或自学者,用于课后自测、解题思路对照与概念巩固。压缩包内只有 1 个 PDF 文件,共 33KB,轻量易用,适合下载到电脑或手机随时查阅。

内容覆盖第一章多个重要知识点:计算机的通用性与冯·诺依曼架构、模拟与数字系统在精度上的差异、逻辑电路与加法器/乘法器的组合设计、性能优化中的取舍思维,以及高级语言相对低级语言的抽象优势。解答采用英文原版 Selected Solutions 的呈现方式,每道题都给出简明结论与必要推导,比如通过逻辑门组合计算 ax+b、求四个数的平均值、分解 (a+b)^2 等,方便读者对照教材原文逐项理解。

目前已有 720 人学习下载,搭配纸质教材或课程进度使用,能帮助初学者在作业遇到困难时快速定位思路,夯实第一章概念后再进入后续章节。

1. 计算机系统概论(原书第二版)习题答案第一章:为什么这份答案值得自己推一遍

“计算机系统概论(原书第二版)习题答案第一章”是个检索量不小的词,可多数人点进来并不是想让知识点过脑,而是想让作业快点“有答案”。我的建议恰恰相反:第一章内容不负责难住你,它负责把“程序到指令再到硬件”这条链路在你脑子里建立起来,参考答案只是最后一步的校验信号。

搜这个词的人通常是三类:正在上一门系统类课程、跨考补基础、自学翻到第一章。前两类人的问题往往不在“算不出”,而在“不会组织答案”——概念背过但下笔不成句,计算能蒙对但说不清步骤。第三类更容易踩坑,因为第一章概念零散、题型不统一,特别容易陷入“只比对答案、不还原推导过程”的怪圈。

下面按“先补概念,再推题型,再排查易错点”的顺序讲。目标不是替你完成作业,而是让你看完后能流畅说出“这类题为什么这么解”。这比答案本身值钱,因为后续几章全是建立在这些概念上的。

2. 先补齐概念再对答案:寄存器、字长与指令周期的答题地基

第一章习题无论哪个教材版本,基本逃不出三类:概念解释、小计算、流程描述。与其逐题抄,不如先把这三类背后的概念钉死。概念不确定时做的计算,错得最隐蔽——数字看起来都对,逻辑却经不起追问。

2.1 寄存器与存储单元的差别:概念题的标准答法

第一章最爱考“寄存器”和“存储单元(主存)”的区分。很多人背过“寄存器快、存储单元慢”,但题目换个问法就答不全。

寄存器在 CPU 内部,访问时不需要给出地址,而是用寄存器名直接选通;主存存储单元在 CPU 外部,必须给出地址才能读写。一个适合答题的句式是:

寄存器是 CPU 内部按名字访问的高速度临时存储位置;存储单元是主存中按地址访问的数据位置,容量远大于寄存器组。

如果题目进一步问“寄存器为什么比主存快”,答案要落到物理位置和访问机制上:寄存器选通路径短,和运算部件在同一片硅片上;主存要经历地址译码、行/列选通、数据总线传输,路径长且受总线宽度限制。

这类概念题常见的扣分点是不写“按什么方式访问”。只说“快很多”不算完整答案,必须点出“按名字访问”和“按地址访问”这个本质区别。另一个坑是把“存储单元”混成“存储元件”。某些教材中“存储单元”指能存一位二进制位的电路,也可能指一个编址单位,这两种定义都出现过。答题前先确认你用的教材管哪一层叫“存储单元”,否则和参考答案对不上是必然的。

2.2 地址总线、数据总线与字长:小计算题的三个关键量

涉及总线宽度和存储空间的题目,第一章几乎每套都有。三个量必须分开理解:

  • 地址总线宽度决定能区分多少个地址,而不是一次能传多少数据。
  • 数据总线宽度决定一次访存能并行传输多少位。
  • 字长是运算器、寄存器和系统总路线上的“标准位宽”,一般指一次整数运算能处理的位数。

可寻址空间的计算模板是:

可寻址单元数 = 2^(地址线数目) 最大可寻址容量 = 可寻址单元数 × 编址单位位数

注意“编址单位”绝大多数教材按字节编址,也就是 8 位一个地址。有些机算机会按字编址,那样容量公式里的编址单位就是字长。答题时先把“按字节编址”或“按字编址”写明,这一句话能避免后面所有数字算错。

数据总线宽度不决定地址空间。很多同学看到数据总线 64 位,就顺手把容量也算成 64 位,这是常见翻车点。正确关系是:数据总线影响一次读写的数据量,而可寻址范围由地址线决定。比如地址线 32 条、按字节编址,可寻址 2^32 字节;数据线 64 位只是说明一次能读 8 字节,并不改变地址数量。

2.3 指令周期四步法:流程类题目答得完整的关键

流程类习题常问“一条指令从开始到结束经历了哪些过程”。通常的标准回答围绕四个阶段组织:

  1. 取指:程序计数器给出下一条指令地址,控制器把指令取到指令寄存器。
  2. 译码:指令寄存器中的操作码被解析,决定需要哪些操作数。
  3. 取操作数:按地址从寄存器或主存中读出参与运算的数据。
  4. 执行:运算器完成操作,必要时把结果写回寄存器或主存。

不同教材会把这四步拆得更细,比如把“回写”单独列成第五步,或者把“地址计算”并入取操作数。答题技巧是写明“至少包含以下阶段”,然后按你教材的顺序排列。不会错,因为“至少包含”给自己留了余地。

很多简答题只写“取指、执行”两个词,分数必然低。要把每个阶段“涉及哪个部件、产生什么结果”写出来。常见答题句:

取指阶段由程序计数器提供地址,从主存读出指令并放入指令寄存器;执行阶段由运算器根据操作码完成运算,结果经数据总线写回。

2.4 概念到句式对照表:把记忆点变成能下笔的句子

考点答题句式易错点
总线一组共享的传输通道,分为地址总线、数据总线、控制总线只说“传输数据”,漏掉地址和控制线
寄存器CPU 内部按名字访问的临时存储位置写成“有地址”
程序计数器存放下一条指令地址的寄存器混成“当前正在执行指令的地址”
指令周期从取指到执行完成所需的全部时间只写一个“执行”
补码正数原码不变,负数按位取反再加一忘掉符号位参与扩展

对着这张表做题时,先看题目是“解释术语”还是“对比概念”。解释术语题把表中句式展开即可;对比题则要额外写一句“二者的本质差别是……”。很多答案差的不是知识,是缺了这句总结性差异。

3. 手把手推第一章三类典型题:进制、真值表、指令流程

概念地基打好后,开始做题。这里不按题号顺序,而是按题型来。第一章大题的出题方式相对固定,能把下面三类题各推熟一份,大部分作业都能覆盖。

3.1 进制与补码题:一位位推完,再用脚本复核

进制题是第一章的计算主力,常见要求是十进制转二进制、八进制、十六进制,以及求补码。以“求十进制数 -47 的 8 位补码”为例,标准推导步骤是:

  1. 取绝对值 47,写成 8 位二进制:00101111。
  2. 按位取反:11010000。
  3. 加 1:11010001。
  4. 校验:11010001 取反加一应该回到 00101111,符号位为 1,说明是负数。

这个过程不复杂,但手算容易在某一位上进位出错。我习惯在完成每道手算题后用一个短脚本复核:

def twos_complement_bits(value: int, width: int = 8) -> str: mask = (1 << width) - 1 bits = value & mask return f"{bits:0{width}b}" # 验证 -47 的 8 位补码 print(twos_complement_bits(-47, 8)) # 预期输出 11010001

这段代码的原理是用按位与操作模拟固定位宽的截断。mask = (1 << width) - 1生成 8 位的全 1 掩码,负数与掩码做与运算后,Python 的无限精度整数会被强制截断成低 8 位。f"{bits:0{width}b}"负责补齐前导零。

参数说明:value是要转换的十进制整数,attention width 必须与题目要求的编码位宽一致。如果题目问 16 位补码,就传width=16。脚本只作复核,不建议直接替代手算过程——考试时不能跑代码,答题步骤必须能独立写出来。

边界情况值得单列:-128 的 8 位补码是 10000000,这是最小负数;127 的补码是 01111111,最大正数。-128 取反加一时会溢出到 10000000,初看像没变化,其实正确。遇到这类结果别急着“修正”,先想想范围。

3.2 真值表与逻辑表达式题:从文字条件到完备枚举

另一类常见题是给定逻辑条件写真值表,或反过来给真值表写表达式。以“输入为 a 和 b,仅当 a=1 且 b=0 时输出 1”为例,做题顺序是:

  1. 数清楚输入数量(2 个),因此有 2^2 = 4 行。
  2. 按 a、b 二进制升序列举:00、01、10、11。
  3. 逐行对照条件填写输出:10 那行输出 1,其余行输出 0。
  4. 按输出为 1 的行写表达式:a 为 1、b 为 0,所以 a AND (NOT b)。
# 用枚举验证真值表完备性 for a in [0, 1]: for b in [0, 1]: f = a & (1 ^ b) # a AND NOT b print(f"a={a} b={b} -> f={f}")

这里1 ^ b实现了逻辑非,效果和not b一致,但返回 0/1 整数,方便和&混用。参数说明:两层循环覆盖所有输入组合,输出 4 行数据,与手写真值表逐一对照,可以有效发现“漏列组合”或“逻辑写反”的问题。

写表达式时注意优先级。a & (1 ^ b)的括号不能省略,否则容易误看成(a & 1) ^ b,两者真值表完全不同。第一章考试里最常见的就是这种差一对括号、整张表全错的低级错误。写完表达式后,把四行输入再代一遍,不要只看输出为 1 的行,输出为 0 的行同样能暴露问题。

3.3 指令流程题:按阶段组织答案,避免漏步骤

“简述一条指令的执行过程”是简答题里的常青树。答法要结构化,不能写成一段散文。我把答题模板拆成四行:

阶段涉及部件必要动作结果
取指程序计数器、主存、指令寄存器送出地址,读出指令指令落入指令寄存器
译码控制器/译码器识别操作码,生成控制信号明确操作类型
取操作数寄存器堆、主存按寻址方式读取源数据数据就绪
执行运算器完成运算,写回结果结果更新寄存器或主存

答题时按表格展开成段落,每阶段写一句“动作 + 结果”。比如:

取指阶段由程序计数器生成地址并送到地址总线,主存按该地址读出指令经数据总线送至指令寄存器,随后程序计数器按指令长度自增或跳转。

注意程序计数器的变化逻辑:顺序执行时加指令长度,分支跳转时改成目标地址。很多教程只写“自增”,忽略了跳转情况。第一章若讲到分支指令,务必补上“按指令要求修改”这个说法。

如果题目还要求“说明控制器与运算器的分工”,就从“控制 vs 计算”来答:控制器发控制信号调度每一步,运算器实际执行加减和逻辑操作。别写“CPU 统一处理”,这种大而化之的表述得不了分。

4. 第一章习题答案排查:五个高频翻车点与修正方法

这一章专门讲对照答案时怎么排查。你做完题发现和参考答案对不上,多数不是因为你没背概念,而是下面五个坑里至少踩了一个。每条按“现象 → 原因 → 解决”来写,可以直接当检查清单用。

4.1 现象:补码边界值看着不对,怀疑参考答案有问题

经常有人算到 -128 的 8 位补码就卡住。手算结果是 10000000,取反加一之后还是 10000000,怎么验都“没变化”,于是认为自己算错,跑去改答案。实际上这是边界值的正常现象。

原因:-128 的补码在 8 位表示中已经是表示范围的最左侧端点,对它取反加一刚好回到自身。这等价于数学上的溢出回绕,不是错误。类似地,-1 的 8 位补码是 11111111,如果把它当成“原码”解释,会得到 -127,造成混乱。

解决:判断补码结果始终用“符号位为 1 表示负数”和“取反加一回到绝对值”两个规则复核。边界值特殊,建议单独记忆:最小负数的补码永远是 1000…0,最大正数是 0111…1,-1 是全 1。这三个特例记住后,边界题不会再翻车。

4.2 现象:十六进制转二进制后字节序不对

题目要求把十六进制数写成二进制,或者把多字节数据按内存地址排列。常见的错误是手算时从右往左拆,结果低位字节在前还是高位字节在前搞反。

原因:十六进制转二进制本身没错,错在题目隐含的大小端要求。比如一个 16 位数据 0x12A4,按大端在主存中先存高字节 12,再存低字节 A4;按小端则反过来。有些习题插图中画了内存地址递增方向,你不看地址就排字节序,必然对不上。

解决:做题时先在草稿纸上标注“地址递增方向”,再标“大端/小端”。题目没提时,默认按教材约定。回答时把“按大端排列为……”这句话写清楚,即使教材约定不同,老师也能看出你理解了两个概念的分界。

4.3 现象:可寻址空间与存储容量混为一谈

计算题问“这块主存有多大”,你算出的数字和参考答案差 8 倍或更多,常发生在“按字节编址”和“按字编址”之间。

原因:可寻址空间等于“地址数量”,存储容量等于“地址数量 × 每个地址的数据宽度”。地址数量由地址线宽度决定,每个地址对应多少位由编址单位决定。题目说地址线 16 条、按字编址、字长 16 位,可寻址 2^16 个字,容量就是 2^16 × 16 位。把“2^16 个字”直接当成“2^16 字节”就差了。

解决:答题时统一写成两步:

地址数量 = 2^16 = 65536 容量 = 65536 × 16 位 = 131072 位 = 16 KB

关键是最后一步换算写清楚:8 位为 1 字节,所以 131072 位除以 8 才是字节数。看到参考单位是 KB 还是 KB 字,先换算成同一种单位再比较。

4.4 现象:简答题写了一大段,分数还是低

题干问“简述寄存器和主存的区别”,你写了二三百字,结果参考答案只有四五行,分数却不理想。原因通常不是内容少,而是没有踩中给分点。

原因:评分标准看“寄存器按名字访问、主存按地址访问”这类对比核心,以及“速度、容量、位置”三个维度。长篇大论若没有明确点出对比关系,老师很难给分。

解决:把答案改成两段式。第一句直接下结论:“二者本质区别是访问方式不同。”第二句展开三个对比维度:速度、容量、位置。最后一句回到题目语境:“因此程序频繁使用的临时数据放在寄存器,大量数据放在主存。”这种结构覆盖了所有常见给分点。

4.5 现象:真值表输出列与参考答案全错位

自己画的真值表行数和参考答案一样,但输出列错位严重,从某一行起全反了。

原因:输入列举顺序不一致。你按 a 高位、b 低位的顺序列 00、01、10、11,参考答案可能按 b 高位、a 低位排列,或者行顺序用了格雷码顺序。

解决:写真值表前先确定输入变量顺序。建议固定为“第一个变量作为最高位,按二进制递增列举”。如果参考答案顺序不同,不要直接抄输出列,而是先按自己顺序重算一遍,再对照逻辑结果是否一致。逻辑结果相同时,行顺序不同不影响正确性,只要标注清楚变量顺序即可。

5. 用自测表闭环验证答案:范围、一致性与边界三遍检查

对照完参考答案,别急着合上书。解决实际问题时,验证是不可略过的一步;对学生来说,把做完的题放进一套检查流程,效果比再刷十道题更明显。这一节给一套可复用的自测方法。

5.1 一张自测表:逐题记录考点、差异与回看项

做完全章习题后,我习惯拉一张自测表,把每道题的关键信息落到表格里:

题号考点我的答案核心与参考答案差异差异原因需要回看的概念
1补码转换11010001无-补码规则
2地址空间直接写 2^16少写编址单位漏了按字节编址总线与编址

表格填完,答案检查就从“感觉差不多”变成“逐项可查”。差异原因一栏不要写“算错”,要写具体现象:“符号位未扩展”“漏了取操作数阶段”。写具体,回看时才有针对性。

5.2 第一遍检查:范围检查,看有没有漏子问题

范围检查解决的是“题目有三问,你只答了一问半”的漏题问题。第一章习题的题干有时藏得深:问“该 CPU 可寻址空间多大”,后面半句还跟着“若改为按字编址,容量变为多少?”你只答第一问,第二种情况没写,扣分很冤枉。

做法是逐字圈题干,找出所有“若”“分别”“并说明理由”这类词。每一处都是独立的得分点。填自测表时,把每个子问题拆成一行记录。这样不会漏。

5.3 第二遍与第三遍检查:一致性与边界检查

一致性检查针对论述题。看你的答案内部有没有自相矛盾。比如前面写“取指阶段由程序计数器提供地址”,后面却说“程序计数器在译码阶段更新”,两句话虽然各说各的,但放在一起就暴露了时序理解混乱。正确做法是把指令周期各阶段按时间顺序核对一遍,每个阶段只做一件事,动作不重叠。

边界检查针对计算题。设计几个边界值代回题目:地址线全 1、数据全 0、补码最小值、真值表全输入组合。边界值通过不代表全对,但边界值出错一定有问题。比如补码题把宽度从 8 位改成 16 位,符号扩展是否一致,这是第一章最容易漏的边界条件。

5.4 差异归类:把“对不上答案”变成下次能避开的坑

做完前面两遍检查,剩下的差异分成两类:知识盲区和技术性失误。知识盲区需要回看书本概念,重新写一遍该题的完整推导;技术性失误则记录成“下次先检查符号位、先列变量顺序”这类行为清单。

我自己带过的一个经验:每章准备一个“翻车记录”,只记现象和原因,不记完整答案。复习时扫一眼记录,就知道哪些地方要格外小心。这比把错题整个抄一遍更高效,因为重看完整冗长的题目会分散注意力。

6. 进阶:把第一章答案改编成一道题的三种问法

这套题做完、检查过后,还有一个我自己觉得很有效的收尾动作:把同一道题改写成三种问法,再分别回答。

以“补码”为例。原题常见问法是“求 -47 的 8 位补码”,这是纯计算。把它改成概念题:“补码和原码的区别是什么,为什么用补码表示负数?”再改成流程题:“简述用补码做减法时,运算器需要经历哪些步骤?”三个问题指向同一个知识点,但答题逻辑完全不同。能三问都答顺,这个考点才算真正拿下。

这样做的好处是,第一章很多题如果你只会一种答法,换个题型就懵。比如真值表题改成“给出逻辑表达式画出电路图”,指令周期题改成“某个阶段出错会导致什么后果”,都需要在不同抽象层次之间切换。用“反向出题”的方式逼自己站在出题者角度想问题,比一遍遍重复刷题更容易暴露理解缺口。

我现在仍然保留这个习惯——每学完一章,挑三个最重要的知识点各出三道变体题,不写答案,隔天再做并核对。费时不多,但效果比多做十道重复题更稳。第一章是后面所有章节的地基,在这里多花半小时,到存储器分层、指令流水线、I/O 子系统时就能少走很多弯路。希望帮到你。

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

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

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

立即咨询