2025年10月高等教育自学考试全国统一命题考试

计算机组成原理 (课程代码: 02318)

零基础详解版 | 30题 | 满分100分
一、单项选择题 (每小题2分,共30分)
1. 教材出处:第1章 第1节

在计算机内部,指令信息采用的表示形式是

A. 二进制序列

B. 八进制序列

C. 十进制序列

D. 十六进制序列

正确答案:A

知识背景

计算机是一种电子设备,其内部所有信息的存储和处理都依赖于电路的两种基本状态:高电平(通常用"1"表示)和低电平(通常用"0"表示)。这两种状态天然对应了二进制数系统中的两个数码:0和1。因此,计算机内部的一切信息——无论是数据(数字、文字、图像、声音)还是指令(告诉CPU该做什么操作的命令),都必须用0和1组成的二进制序列来表示。

所谓"指令",就是CPU能够识别并执行的一条命令。例如"把寄存器A中的值加上寄存器B中的值"这样的操作,在计算机内部会被编码为一串0和1组成的二进制代码(称为机器码)。指令通常由"操作码"(表示做什么操作)和"地址码/操作数"(表示对谁做操作)两部分组成,每一部分都是二进制表示。

逐项分析

A. 二进制序列 -- 正确。计算机内部的所有信息(包括指令和数据)都以二进制形式存储和处理。这是由计算机硬件的物理特性(电路的高/低电平两态)所决定的根本性质。

B. 八进制序列 -- 错误。八进制使用0~7共8个数码,是人类为了方便阅读较长的二进制数而发明的缩写方式(每3位二进制对应1位八进制)。它只是人类的"辅助表示法",计算机内部并不直接使用。

C. 十进制序列 -- 错误。十进制是人类日常生活中最常用的数制,但计算机内部并不使用十进制。

D. 十六进制序列 -- 错误。十六进制使用0~9和A~F共16个数码,也是人类为了更简洁地书写二进制数而使用的缩写方式(每4位二进制对应1位十六进制),计算机内部存储的仍然是二进制。

记忆要点

核心原则:计算机内部一切信息均为二进制。八进制和十六进制只是人类方便阅读二进制的"速记法"。

2. 教材出处:第2章 第1节

-1001010的8位补码表示是

A. 01001010

B. 10010101

C. 10110101

D. 10110110

正确答案:D

知识背景

在计算机中,我们需要一种方法来表示正数和负数。最常用的方法叫做"补码"(Two's Complement)。要理解补码,需要先了解三个概念:原码、反码、补码。

原码:最高位为符号位(0表示正数,1表示负数),其余位为数值的绝对值的二进制表示。例如,-1001010的8位原码是11001010(符号位1,后面跟数值位1001010)。

反码:正数的反码与原码相同。负数的反码是在原码的基础上,符号位不变,其余各位取反(0变1,1变0)。-1001010的反码为10110101。

补码:正数的补码与原码相同。负数的补码 = 反码 + 1。-1001010的补码:10110101 + 1 = 10110110。

补码的优势在于:它可以将减法运算转化为加法运算,使得计算机硬件设计大大简化。

逐项分析

A. 01001010 -- 错误。这是+1001010的原码/补码(正数三码相同),最高位为0表示正数。

B. 10010101 -- 错误。数值部分与原始数据没有正确的转换关系。

C. 10110101 -- 错误。这是-1001010的反码,不是补码。很多同学容易在这里停下来,忘记补码还需要加1。

D. 10110110 -- 正确。完整推导:原码11001010 -> 反码10110101 -> 补码10110110(反码+1)。

记忆要点

负数求补码口诀:"原码取反加一"。注意选项C是典型的"只取反不加一"的陷阱。

3. 教材出处:第2章 第3节

若传送的是字符C,其ASCII码为1000011,采用偶校验方式传送8位编码,首位增加偶校验位后的编码表示是

A. 01000011

B. 11000011

C. 10000011

D. 00000011

正确答案:B

知识背景

ASCII码:用7位二进制数表示字符。大写字母C的ASCII码是1000011(十进制67)。

奇偶校验:是最简单的一种错误检测方法。在原始数据的基础上增加1位校验位,使得整个编码中1的个数满足特定条件。偶校验要求整个编码中1的个数为偶数;奇校验要求为奇数。

计算过程:字符C的ASCII码1000011中,1的个数为:1+0+0+0+0+1+1 = 3个(奇数个)。偶校验要求总数为偶数,因此校验位应为1(3+1=4,偶数)。首位添加:1 + 1000011 = 11000011。

逐项分析

A. 01000011 -- 错误。校验位为0,整个编码中1的个数仍为3(奇数),不满足偶校验。

B. 11000011 -- 正确。校验位为1,整个编码中1的个数为4(偶数),满足偶校验。

C. 10000011 -- 错误。后7位不是字符C的ASCII码。

D. 00000011 -- 错误。后7位不是字符C的ASCII码。

记忆要点

偶校验规则:数原始数据中1的个数,如果已经是偶数个则校验位填0,奇数个则填1。简记为"凑偶数"。

4. 教材出处:第3章 第2节

采用寄存器间接寻址方式的操作数存放在

A. 寄存器中

B. 内存中

C. 指令中

D. 程序计数器中

正确答案:B

知识背景

"寻址方式"就是指令中用来告诉CPU"去哪里找操作数"的方法。抓住"间接"这个关键词:凡是带"间接"的寻址方式,都意味着"多了一层中转"。

寄存器直接寻址:指令给出寄存器编号,操作数就在这个寄存器中。

寄存器间接寻址:指令给出寄存器编号,但这个寄存器中存放的不是操作数,而是一个内存地址。真正的操作数在这个内存地址对应的内存单元中。

逐项分析

A. 寄存器中 -- 错误。这是"寄存器直接寻址"的情况。在寄存器"间接"寻址中,寄存器里存的是地址,不是操作数。

B. 内存中 -- 正确。寄存器中的地址指向内存,操作数最终从内存中取出。

C. 指令中 -- 错误。这是"立即寻址"的情况。

D. 程序计数器中 -- 错误。PC用于存放下一条指令地址,不存操作数。

记忆要点

寄存器直接寻址 -> 操作数在寄存器中;寄存器间接寻址 -> 操作数在内存中(寄存器只是存了个地址)。

5. 教材出处:第5章 第1节

采用DAM方式存取信息的存储器是

A. 硬盘

B. Cache

C. 磁带

D. 主存

正确答案:A

知识背景

存储器按存取方式分为三类:

随机存取(RAM):可以按任意顺序访问任何存储单元,访问时间恒定。代表:主存、Cache。

顺序存取(SAM):必须从头开始依次访问,不能跳跃。代表:磁带。

直接存取(DAM):介于两者之间,先直接定位到大致区域,再在区域内顺序查找。代表:磁盘(硬盘)。硬盘先将磁头移到目标磁道(直接定位),再等磁盘转到目标扇区(顺序查找)。

逐项分析

A. 硬盘 -- 正确。硬盘是DAM的典型代表,"先跳转再顺序找"。

B. Cache -- 错误。Cache采用随机存取。

C. 磁带 -- 错误。磁带采用顺序存取。

D. 主存 -- 错误。主存采用随机存取。

记忆要点

RAM -> 主存/Cache;SAM -> 磁带;DAM -> 磁盘(硬盘、光盘)。

6. 教材出处:第5章 第2节

有一个64KB的主存储器,按字节编址,其寻址需要地址线

A. 8条

B. 12条

C. 16条

D. 20条

正确答案:C

知识背景

地址线用于从CPU传送地址到内存。每条地址线传送1位二进制信号,n条地址线可以表示2n个不同地址。

计算过程:64KB = 64 × 1024 = 65536 = 216字节。按字节编址,需要216个地址,因此需要16条地址线。

逐项分析

A. 8条 -- 错误。28 = 256字节 = 0.25KB,不够。

B. 12条 -- 错误。212 = 4096字节 = 4KB,不够。

C. 16条 -- 正确。216 = 65536字节 = 64KB,恰好。

D. 20条 -- 错误。220 = 1MB,超过需求。

记忆要点

核心公式:地址线条数 = log2(存储单元总数)。常用对照:210=1K, 216=64K, 220=1M。

7. 教材出处:第6章 第3节

在中断控制方式的准备阶段,设置新屏蔽字的作用是

A. 允许所有中断请求

B. 暂停对某些中断的响应

C. 清除所有中断标记

D. 提高中断优先级

正确答案:B

知识背景

中断是指CPU正在执行程序时,外部设备或内部事件需要CPU注意,CPU暂停当前程序转去处理该事件的机制。

中断屏蔽字用于管理多中断。屏蔽字中的每一位对应一个中断源:为1表示屏蔽该中断(不响应),为0表示允许。设置新屏蔽字就是在处理当前中断时,决定哪些新的中断可以"插队"进来。

逐项分析

A. 允许所有中断请求 -- 错误。如果允许全部,就不需要屏蔽字了。

B. 暂停对某些中断的响应 -- 正确。这是屏蔽字的核心功能,有选择性地暂时禁止某些中断。

C. 清除所有中断标记 -- 错误。这是另一个操作,与屏蔽字无关。

D. 提高中断优先级 -- 错误。优先级由硬件决定,屏蔽字不改变优先级。

记忆要点

中断屏蔽字本质是一个"过滤器",决定哪些中断被暂时挡在门外。

8. 教材出处:第6章 第4节

在DMA控制方式下,实现主存和高速外设之间的直接数据交换时,总线控制权归

A. CPU

B. 内存

C. 外设

D. DMA控制器掌控

正确答案:D

知识背景

DMA(Direct Memory Access)允许外设直接和内存之间交换数据,不需要CPU在中间搬运。DMA传输流程:(1) CPU初始化DMA控制器;(2) DMA控制器向CPU请求总线控制权;(3) CPU让出总线;(4) DMA控制器接管总线,直接管理数据传输;(5) 传输完成后通过中断通知CPU。

逐项分析

A. CPU -- 错误。DMA传输期间CPU已让出总线控制权。

B. 内存 -- 错误。内存是被动存储部件,不能控制总线。

C. 外设 -- 错误。外设通过DMA控制器间接与总线交互。

D. DMA控制器掌控 -- 正确。DMA控制器作为总线主设备,接管总线控制权来管理数据传输。

记忆要点

DMA的核心:"越过CPU,直接搬运"。总线控制权在DMA传输期间归DMA控制器。

9. 教材出处:第3章 第3节

下列各种寻址方式中不需要从存储器中取操作数的是

A. 寄存器直接寻址

B. 直接寻址

C. 间接寻址

D. 寄存器间接寻址

正确答案:A

知识背景

判断是否需要访存取操作数的关键:操作数最终存放在哪里。只要操作数本身在寄存器中,就不需要访问存储器。

逐项分析

A. 寄存器直接寻址 -- 正确。操作数就在寄存器中,CPU直接从寄存器取出,不需要访问存储器

B. 直接寻址 -- 错误。指令中给出存储器地址,需要访问1次存储器取操作数。

C. 间接寻址 -- 错误。指令给出的地址指向的存储单元里放的还是地址,需要至少2次访存

D. 寄存器间接寻址 -- 错误。寄存器中放的是内存地址,需要根据该地址访问1次存储器取操作数。

记忆要点

各寻址方式访存次数:立即寻址=0次,寄存器直接=0次,直接寻址=1次,寄存器间接=1次,间接寻址>=2次。"寄存器直接不出门,间接的都要跑一趟。"

10. 教材出处:第3章 第1节

MIPS处理器采用的是定长指令格式,每条指令长度为

A. 8位

B. 16位

C. 32位

D. 64位

正确答案:C

知识背景

MIPS是一种经典的RISC架构处理器。RISC的一个重要特征是采用定长指令格式——所有指令编码后长度完全相同。MIPS统一固定为32位(4字节)

MIPS有三种指令格式(R型、I型、J型),但总长度都是32位,只是内部字段划分不同。

逐项分析

A. 8位 -- 错误。太短,无法编码足够信息。

B. 16位 -- 错误。不是标准MIPS指令长度。

C. 32位 -- 正确。MIPS的所有指令固定为32位。

D. 64位 -- 错误。过长,即使MIPS64架构指令仍是32位。

记忆要点

MIPS的"32":32个通用寄存器、32位指令长度、32位数据通路。

11. 教材出处:第6章 第3节

非向量中断方式下,获取中断服务程序的入口地址的方法是

A. 由硬件直接产生

B. 从中断向量表中获得

C. 运行查询程序获得

D. 从中断服务程序中获得

正确答案:C

知识背景

向量中断:硬件自动提供中断向量号,通过中断向量表直接找到入口地址。速度快。

非向量中断:硬件不提供向量号。CPU响应中断后跳转到一段公共的查询程序(软件),逐一检查各中断源的状态,确定是哪个设备发的请求,再跳转到对应的服务程序。速度慢但硬件简单。

逐项分析

A. 由硬件直接产生 -- 错误。这是向量中断方式的特征。

B. 从中断向量表中获得 -- 错误。中断向量表是向量中断的机制。

C. 运行查询程序获得 -- 正确。非向量中断通过软件轮询识别中断源。

D. 从中断服务程序中获得 -- 错误。逻辑矛盾,我们正是要找服务程序的入口。

记忆要点

"向量靠硬件查表,非向量靠软件轮询。"

12. 教材出处:第6章 第3节

中断响应过程中的保存断点是指

A. 保存中断请求信号

B. 保存中断屏蔽字

C. 将中断向量压入堆栈

D. 将程序计数器PC的内容压入堆栈

正确答案:D

知识背景

断点 = 被中断程序将来应该恢复执行的位置 = PC的当前值。保存断点就是将PC值压入堆栈,以便中断处理完后能恢复执行。

逐项分析

A. 保存中断请求信号 -- 错误。中断请求信号是电信号,与断点无关。

B. 保存中断屏蔽字 -- 错误。这属于"保存现场",不是"保存断点"。

C. 将中断向量压入堆栈 -- 错误。中断向量用来找服务程序入口,不是断点。

D. 将PC内容压入堆栈 -- 正确。PC中的值就是断点(返回地址),将其压栈保存。

记忆要点

断点 = PC的值 = 返回地址。保存断点 = PC压栈。区分"保存断点"(硬件自动保存PC)和"保存现场"(软件保存寄存器)。

13. 教材出处:第4章 第1节

指令顺序执行时,提供下一条指令地址的寄存器是

A. MAR

B. MDR

C. IR

D. PC

正确答案:D

知识背景

CPU内部四个关键寄存器:

MAR(存储器地址寄存器):暂存CPU要访问的内存地址,是地址传递的中转站。

MDR(存储器数据寄存器):暂存CPU与内存之间传递的数据。

IR(指令寄存器):存放当前正在执行的指令内容。

PC(程序计数器):存放下一条将要执行的指令的地址。每取完一条指令自动增加。

逐项分析

A. MAR -- 错误。MAR只是地址中转站,取指时CPU把PC的值送入MAR。

B. MDR -- 错误。MDR处理数据内容,与指令地址无关。

C. IR -- 错误。IR保存的是指令本身,不是指令的地址。

D. PC -- 正确。PC的核心功能就是提供下一条指令的地址。

记忆要点

"PC指路、IR记令、MAR存址、MDR搬运。"

14. 教材出处:第3章 第2节

MIPS计算机的汇编指令"sub $s1, $s2, $s3"的功能是

A. $s1=$s2-$s3

B. $s2=$s1-$s3

C. $s3=$s1-$s2

D. $s3=$s1 & $s2

正确答案:A

知识背景

MIPS算术指令采用三操作数格式:操作码 目的寄存器, 源寄存器1, 源寄存器2。即 op rd, rs, rt,含义是:rd = rs op rt。第一个寄存器是目的操作数(存结果),后两个是源操作数

所以 sub $s1, $s2, $s3 = $s1 = $s2 - $s3。

逐项分析

A. $s1=$s2-$s3 -- 正确。符合"op rd, rs, rt"格式。

B. $s2=$s1-$s3 -- 错误。目的寄存器和源寄存器搞反。

C. $s3=$s1-$s2 -- 错误。目的寄存器应是第一个。

D. $s3=$s1 & $s2 -- 错误。操作类型(&是AND)和目的寄存器都错。

记忆要点

MIPS算术指令:"结果在前,操作数在后"。sub a, b, c = a = b - c。

15. 教材出处:第3章 第1节

下列表述中最符合RISC风格计算机的是

A. 指令的条数较多

B. 寻址方式灵活多样

C. 各种指令的使用频率相差不大

D. 指令的长度一致

正确答案:D

知识背景

RISC(精简指令集)的核心特征:指令数目少且简单;指令长度固定(定长编码);寻址方式少且规整;Load/Store架构;大量通用寄存器;大多数指令单周期完成;硬布线控制为主。

CISC(复杂指令集):指令多且复杂;指令变长;寻址方式多样灵活;微程序控制为主。

逐项分析

A. 指令条数较多 -- 错误。这是CISC特征,RISC指令数少。

B. 寻址方式灵活多样 -- 错误。这是CISC特征,RISC寻址方式简单。

C. 各种指令使用频率相差不大 -- 错误。无论RISC还是CISC,指令使用频率都是不均匀的。

D. 指令长度一致 -- 正确。定长指令是RISC最显著的特征之一,有利于流水线设计。

记忆要点

RISC六字诀:"少、定、简、寄、快、硬"。少=指令少;定=长度固定;简=寻址简单;寄=运算用寄存器;快=单周期完成;硬=硬布线控制。

二、填空题 (每小题2分,共12分)
16. 教材出处:第1章 第1节

计算机用户通常可分为四类:最终用户、系统管理员、______和______。

正确答案:应用程序员、系统程序员

知识背景

教材按照用户与硬件的"距离"将用户分为四类:

最终用户:使用现成软件(如Word、浏览器),不需要编程。

系统管理员:管理和维护计算机系统(装系统、配网络、备份)。

应用程序员:用高级语言开发面向用户的应用软件(如App、游戏)。

系统程序员:编写系统软件(操作系统、编译器、驱动程序),需要深入了解硬件。

记忆要点

四类用户按离硬件远近排列:最终用户 > 应用程序员 > 系统程序员 > 系统管理员。

17. 教材出处:第3章 第1节

指令所处理的基本数据类型分为______和______两种类型。

正确答案:数值数据、非数值数据

知识背景

数值数据:可以参与算术运算(加减乘除)的数据。包括定点整数、浮点数、十进制数(BCD码)等。

非数值数据:不直接参与算术运算的数据。包括逻辑数据(布尔值,参与与/或/非运算)和字符数据(ASCII码等文字符号)。

记忆要点

"能做加减乘除的是数值数据,不能做加减乘除的是非数值数据。"

18. 教材出处:第2章 第2节

常用的标志有零标志ZF、溢出标志OF、______和______。

正确答案:符号标志SF、进/借位标志CF

知识背景

CPU在运算后会自动设置标志寄存器中的标志位,用于条件判断和分支跳转:

ZF(零标志):结果为零时ZF=1。

OF(溢出标志)有符号数运算结果溢出时OF=1。

SF(符号标志):等于结果的最高位。SF=0正数,SF=1负数。

CF(进/借位标志)无符号数运算发生进位或借位时CF=1。

记忆要点

四标志口诀:"零(Z)、溢(O)、符(S)、进(C)"。OF管有符号,CF管无符号,这是最易混淆的。

19. 教材出处:第4章 第3节

Intel将内部异常分为故障、______和______三类。

正确答案:陷阱、终止

知识背景

异常(内部中断)是CPU在执行指令过程中产生的意外事件。Intel将其分三类:

故障(Fault):可修复。处理后重新执行引发故障的指令。典型例子:缺页故障。

陷阱(Trap):有意为之。处理后执行引发陷阱的下一条指令。典型例子:系统调用、调试断点。

终止(Abort):无法修复的严重错误。直接终止程序。典型例子:硬件故障。

记忆要点

"故障可修重执行,陷阱有意往下行,终止致命不能行。"

20. 教材出处:第5章 第1节

在存储器中,按存取方式可分为随机存取、______和______三类。

正确答案:顺序存取、直接存取

知识背景

随机存取(RAM):可访问任意位置,时间恒定。代表:内存、Cache。

顺序存取(SAM):必须从头依次访问。代表:磁带。

直接存取(DAM):先跳到大致区域,再顺序查找。代表:硬盘。

记忆要点

"随机找内存,顺序找磁带,直接找磁盘。"

21. 教材出处:第6章 第2节

硬盘读写是指根据盘地址读写目标磁道中的指定扇区,其操作可归纳为寻道、______和______三个步骤。

正确答案:旋转等待、读写

知识背景

硬盘读写三步骤:

寻道(Seek):磁头移动到目标磁道上方。耗时最长。

旋转等待(Rotational Latency):等待目标扇区旋转到磁头下方。平均等待时间=转半圈的时间。

读写(Data Transfer):磁头读取或写入数据。耗时最短。

总访问时间 = 寻道时间 + 旋转等待时间 + 传输时间。

记忆要点

"先寻道定磁道,再等转到扇区到,最后读写数据跑。"

三、简答题 (每小题5分,共20分)
22. 教材出处:第1章 第1节

简述冯·诺依曼结构的主要思想。(5分)

参考答案

(1)计算机由运算器、控制器、存储器、输入设备和输出设备五大部件组成。

(2)采用"存储程序"工作方式,即将程序和数据预先存放在存储器中,计算机运行时自动逐条取出指令并执行。

(3)指令和数据均以二进制形式表示,存放在同一个存储器中。

(4)指令由操作码地址码两部分组成。

(5)早期冯·诺依曼计算机以运算器为中心

知识背景

1945年,数学家冯·诺依曼提出了"存储程序"思想:把程序也当作数据,预先存放到存储器里,让计算机自动依次读取指令并执行。这个思想是现代所有通用计算机的设计基石。

可以把冯·诺依曼计算机想象成一个"自动化工厂":仓库(存储器)里既存放原材料(数据)也存放工艺流程单(程序);工人(控制器)按流程单指挥车间(运算器)加工;原材料从大门运进来(输入设备),成品运出去(输出设备)。

详细解析

五大部件:运算器(ALU,做算术和逻辑运算)、控制器(取指令、译码、发控制信号)、存储器(存程序和数据)、输入设备(键盘等)、输出设备(显示器等)。运算器+控制器=CPU。

存储程序:最核心的思想。程序预存入内存,CPU通过PC自动取指执行,无需人工干预。这使同一台硬件装入不同程序就能完成不同任务。

二进制:指令和数据都用二进制表示,存在同一个存储器中。CPU通过访问时机区分两者(取指阶段取出的当指令,取数阶段取出的当数据)。

以运算器为中心:早期设计中所有数据传送经过运算器。现代已改为以存储器或总线为中心。

记忆要点

五个要点:五大部件 + 存储程序 + 二进制 + 操作码/地址码 + 运算器中心。其中最核心的是"存储程序"。

23. 教材出处:第3章 第3节

简述转移指令和调用(转子)指令的区别。返回指令是否需要有地址码字段?(5分)

参考答案

(1)转移指令只改变PC的值,使程序跳转到目标地址,不保存返回信息。

(2)调用指令除了修改PC外,还要保存返回地址(将PC值压栈或存入链接寄存器),以便子程序执行完后能返回。

(3)返回指令不需要地址码字段,因为返回地址已在调用时保存到栈顶或链接寄存器中,返回指令只需从中取出即可。

知识背景

转移指令就像看书时说"翻到第50页"——你跳过去了,但不记得从哪里跳的。

调用指令就像"先翻到附录A看说明,看完回来"——跳过去之前先记住当前位置。

两者核心区别:调用指令多了"保存返回地址"这一步。

详细解析
特征转移指令调用指令返回指令
修改PC
保存返回地址是(压栈/存LR)否(取出地址)
需要地址码
典型指令JMP, BEQCALL, JALRET, JR $ra

返回指令不需要地址码的原因:返回地址是动态的(同一子程序可能被不同地方调用),不可能在指令中写死,而是从栈/寄存器中隐式获取。

24. 教材出处:第4章 第1节

简述通常执行一条指令的步骤。每条指令的执行步骤是否都一样?(5分)

参考答案

通常执行一条指令包括以下步骤:

(1)取指令:根据PC从主存取出指令送入IR,PC自动增量。

(2)指令译码:分析操作码确定操作类型,分析地址码确定操作数来源。

(3)取操作数:根据寻址方式从寄存器或主存获取操作数。

(4)执行运算:在ALU中完成指令规定的操作。

(5)写回结果:将结果写入目的寄存器或主存。

不是每条指令步骤都一样。例如NOP只需取指和译码;跳转指令不需要取操作数和写回;Load指令需要额外访存。

知识背景

CPU的基本工作就是不断循环"取指令-执行指令"。可以想象CPU是一个按流程办事的工人:看纸条(PC)上的编号 -> 去仓库(内存)取工艺卡片(指令)-> 读懂卡片 -> 按要求拿材料 -> 用计算器算 -> 把结果放好 -> 更新纸条 -> 重复。

详细解析

五步简记为 IF -> ID -> OF -> EX -> WB

其中取指和译码几乎所有指令共有,但后续步骤因指令类型而异。不同指令举例:

  • NOP:只做取指+译码,什么也不做。
  • JMP target:直接将目标地址写入PC,不需取操作数和写回。
  • ADD R1,R2,R3:完整五步。
  • Load:需额外访存读数据。
  • Store:需访存写数据,但不写回寄存器。
25. 教材出处:第5章 第2节

简述SRAM芯片和DRAM芯片各自特点及其应用场合。(5分)

参考答案

对比项SRAMDRAM
存储元件双稳态触发器(6T)电容+晶体管(1T1C)
存取速度快(纳秒级)较慢(几十纳秒级)
是否需要刷新不需要需要(约每2ms一次)
集成度
功耗
成本
典型应用Cache(高速缓存)主存(内存)
知识背景

存储器"又快又大又便宜"不可兼得。现代计算机用多级存储层次解决:最近CPU的用SRAM(快但小贵)做Cache,稍远的用DRAM(慢但大便宜)做主存。

SRAM用触发器存储,只要通电就能保持数据。像你的书桌——面积小但伸手就到。

DRAM用电容存储,电荷会泄漏需要定期刷新。像你的书架——容量大但要走过去拿。

记忆要点

"SRAM快贵小做Cache,DRAM慢廉大做主存。"

四、计算题 (每小题6分,共18分)
26. 教材出处:第1章 第4节

(6分)某计算机的主频为500MHz,执行一段程序时共需执行200条指令。已知加法指令的CPI为2,占40%;乘法指令的CPI为4,占30%;其他指令的CPI为3,占30%。求:

(1)该程序的平均CPI

(2)CPU执行该程序所需的CPU时间

解题过程

知识背景

主频(Clock Frequency):CPU每秒产生的时钟脉冲数。500MHz = 5亿个时钟周期/秒。

时钟周期 = 1/主频 = 1/(500×106) = 2ns(纳秒)。

CPI(Cycles Per Instruction):每条指令所需的时钟周期数。不同指令CPI不同。

平均CPI = ∑(各类指令CPI × 占比)。

CPU时间 = 指令条数 × 平均CPI × 时钟周期。

第(1)小题:求平均CPI

平均CPI = 2×0.4 + 4×0.3 + 3×0.3

= 0.8 + 1.2 + 0.9

= 2.9

含义:平均每条指令需要2.9个时钟周期。

第(2)小题:求CPU时间

时钟周期 = 1/500MHz = 2ns

CPU时间 = 200 × 2.9 × 2ns

= 580 × 2ns

= 1160ns = 1.16μs

记忆要点

核心公式三件套:时钟周期=1/主频;平均CPI=∑(CPIi×占比i);CPU时间=指令数×CPI×时钟周期。

27. 教材出处:第2章 第1节

(6分)将十进制数 -1.75 转换为IEEE 754单精度浮点数的二进制存储格式(用十六进制表示最终结果)。

解题过程

知识背景

IEEE 754单精度用32位存储浮点数,分为三部分:

符号位S(1位)+ 阶码E(8位)+ 尾数M(23位)

S:0正1负。E:实际指数+127(偏置值)。M:去掉隐含的整数部分"1",只存小数部分。

详细步骤

第一步:确定符号位

-1.75是负数,S = 1

第二步:将1.75转换为二进制

整数部分1 = 1(2)

小数部分0.75:0.75×2=1.5(取1),0.5×2=1.0(取1),结束

所以 1.75(10) = 1.11(2)

第三步:规格化

1.11(2) = 1.11 × 20(已经是1.xxx形式,指数n=0)

第四步:计算阶码E

E = 0 + 127 = 127 = 01111111(2)

第五步:确定尾数M

去掉隐含的1,取小数部分"11",补零到23位:

M = 11000000000000000000000

第六步:组合32位

1 | 01111111 | 11000000000000000000000

第七步:转十六进制(每4位一组)

1011 | 1111 | 1110 | 0000 | 0000 | 0000 | 0000 | 0000

= B | F | E | 0 | 0 | 0 | 0 | 0

= BFE00000H

记忆要点

转换步骤口诀:定符号 -> 转二进制 -> 规格化 -> 算阶码(+127) -> 取尾数 -> 拼起来 -> 转十六进制。偏置值127 = 27-1。

28. 教材出处:第6章 第1节

(6分)假设总线的时钟频率为100MHz,总线宽度为32位,每个时钟周期传送一次数据。求:

(1)总线带宽

(2)若总线宽度改为64位,总线带宽是多少?

解题过程

知识背景

总线是计算机各部件之间传输数据的公共通道,像一条"高速公路"。

总线宽度:一次能同时传输的数据位数(类比车道数)。

总线带宽 = 时钟频率 × (总线宽度/8),单位为B/s或MB/s。

第(1)小题:32位总线带宽

每次传输数据量 = 32bit / 8 = 4 Byte

每秒传输次数 = 100 × 106

带宽 = 100×106 × 4 = 400MB/s

第(2)小题:64位总线带宽

每次传输数据量 = 64bit / 8 = 8 Byte

带宽 = 100×106 × 8 = 800MB/s

总线宽度翻倍,带宽也翻倍(成正比关系)。

记忆要点

核心公式:总线带宽 = 频率 × (宽度/8)。注意如果是DDR(每周期传两次),还要再乘2。

五、分析设计题 (共20分)
29. 教材出处:第4章 第2节

(12分)下图所示的数据通路中,有A、B两个通用寄存器,一个暂存器C,一条运算结果反馈总线和一条数据输入总线,ALU有加法和减法两种运算。

数据输入总线 ─────┬──────┬───── │ │ [A_in] [B_in] │ │ ┌─┴─┐ ┌─┴─┐ │ A │ │ B │ └─┬─┘ └─┬─┘ [A_out] [B_out] │ │ v v ┌──────────┐ │ ALU │ │ Add/Sub │ └────┬─────┘ [C_in] │ ┌─┴─┐ │ C │ └─┬─┘ [C_out] │ ─────┴──────────── 反馈总线 [C->A] [C->B]

控制信号:A_in(输入总线->A), B_in(输入总线->B), A_out(A->ALU), B_out(B->ALU), C_in(ALU->C), C_out(C->反馈总线), Add(ALU加法), Sub(ALU减法), C->A(反馈总线->A), C->B(反馈总线->B)

(1)若要实现 A = A + B,列出所需的微操作序列和控制信号。(4分)

(2)若要实现 A = A - B,列出所需的微操作序列和控制信号。(4分)

(3)若要实现 A = A + B - A(即 A = B),列出所需的微操作序列和控制信号。(4分)

解题过程

知识背景

什么是数据通路(Datapath)?

数据通路是CPU内部用于传输和处理数据的硬件结构,包括寄存器、ALU、总线等部件以及它们之间的连接关系。你可以把它想象成一个"工厂流水线":原料(数据)从仓库(寄存器)送到加工车间(ALU),加工后的成品再送回仓库。

什么是微操作(Micro-operation)?

一条指令的执行可以分解为若干个更小的基本操作步骤,每个步骤叫一个微操作。每个微操作对应一组控制信号的激活。多个不冲突的微操作可以在同一个时钟周期内并行执行。

本题数据通路的关键约束:

  • ALU的两个输入分别来自A和B寄存器
  • ALU的运算结果必须先存入暂存器C,不能直接写回A或B
  • C中的数据通过反馈总线才能写回到A或B
  • 因此任何运算都至少需要2步:第1步计算存入C,第2步从C写回目标寄存器
第(1)小题:A = A + B
步骤微操作控制信号说明
Step 1C ← A + BA_out, B_out, Add, C_inA和B的值送入ALU做加法,结果存入C
Step 2A ← CC_out, C→AC的内容通过反馈总线写回A

执行后:A = A+B(原始值),B不变。

第(2)小题:A = A - B
步骤微操作控制信号说明
Step 1C ← A - BA_out, B_out, Sub, C_inA和B的值送入ALU做减法,结果存入C
Step 2A ← CC_out, C→AC的内容通过反馈总线写回A

执行后:A = A-B(原始值),B不变。与第(1)题唯一的区别是ALU执行Sub而非Add。

第(3)小题:A = A + B - A(即 A = B)

分析:A + B - A 在数学上等于 B,所以最终目标是将B的值传送到A。但在这个数据通路中,没有"直接传送"的通路(A和B之间不能直接传数据),所有数据操作都必须经过ALU。因此需要分步通过ALU来间接实现。

难点:如果先做A+B存入C再写回A,此时A已被覆盖为A+B,再做减法时原始A的值已经丢失。所以不能直接覆盖A,需要巧妙安排。

解题思路:先算A+B,将中间结果暂存到B中(不覆盖A),然后用新B值减去原A值。

步骤微操作控制信号说明
Step 1C ← A + BA_out, B_out, Add, C_in计算A+B,结果存入C
Step 2B ← CC_out, C→B中间结果(A+B)存入B。此时A仍为原值,B=(A+B)
Step 3C ← B - AA_out, B_out, Sub, C_in新B(=A+B)减去原A,得到C=(A+B)-A=B原始
Step 4A ← CC_out, C→A将结果写回A。此时A=B原始

验证:设原始 A=3, B=5

  • Step 1: C = 3+5 = 8
  • Step 2: B = 8 (A仍=3)
  • Step 3: C = 8-3 = 5 = B原始
  • Step 4: A = 5 = B原始

结果正确。注意:操作后B的值被改变(从5变成8),但题目只要求A=B原始

记忆要点

数据通路题的解题套路:(1) 明确数据通路的约束(哪些部件能连接、数据流向);(2) ALU运算结果必须先存C再写回,所以最少2步;(3) 复杂操作需要用暂存器做中转,注意不要覆盖还需要使用的值。

30. 教材出处:第5章 第3节

(8分)假定主存和Cache之间采用全相联映射,块大小为512字,Cache数据区为4K字,主存地址空间为1M字。回答:

(1)Cache共有多少行?(2分)

(2)主存地址需要多少位?(2分)

(3)画出主存地址的划分(标明各字段名称和位数)。(4分)

解题过程

知识背景

什么是Cache(高速缓冲存储器)?

Cache是位于CPU和主存之间的一层高速小容量存储器。CPU访问数据时先查Cache,如果数据在Cache中(命中),就直接从Cache读取,速度极快;如果不在(未命中),就从主存读取,同时把该数据所在的一整块复制到Cache中,以备后续访问。

什么是"块"(Block/Line)?

Cache和主存之间传输数据的基本单位叫做"块"。主存被逻辑上划分为若干个等大的块,Cache也划分为同样大小的行(Line/Slot)。每次Cache未命中时,会把主存中包含目标数据的一整块复制到Cache的某一行中。

什么是"全相联映射"(Fully Associative Mapping)?

全相联映射是Cache映射方式中最灵活的一种:主存的任意一块可以放到Cache的任意一行中,没有固定的对应关系。这样做的好处是Cache利用率最高、冲突最少,缺点是查找时需要同时比较所有Cache行的标记(Tag),硬件成本高。

三种映射方式的地址划分对比:

映射方式地址划分
全相联标记(Tag)+ 块内地址(Offset)
直接映射标记(Tag)+ 行号(Index)+ 块内地址(Offset)
组相联标记(Tag)+ 组号(Set Index)+ 块内地址(Offset)

全相联映射的特点是没有行号/索引字段,因为任意块可以放任意行,不需要用地址来确定放在哪一行。

第(1)小题:Cache行数

Cache数据区 = 4K字 = 4096字

块大小 = 512字

Cache行数 = Cache数据区 / 块大小 = 4096 / 512 = 8行

(也可以写成:4K = 212,512 = 29,行数 = 212/29 = 23 = 8)

第(2)小题:主存地址位数

主存地址空间 = 1M字 = 220

每个字需要一个唯一的地址,因此需要 20位 地址

(因为 log2(220) = 20)

第(3)小题:主存地址划分

全相联映射下,主存地址分为两个字段:

块内地址(Block Offset) = log2(块大小) = log2(512) = 9位

(512 = 29,需要9位来标识块内的某个字)

标记(Tag) = 总地址位数 - 块内地址位数 = 20 - 9 = 11位

(标记用于标识该块来自主存的哪个位置,在Cache查找时与所有Cache行的标记比较)

地址划分图:

标记(Tag) 11位
块内地址(Offset) 9位

←———— 共20位 ————→

为什么没有"行号"字段?因为全相联映射允许任意主存块放入任意Cache行,不需要用地址的某几位来指定放在哪一行。相比之下,直接映射和组相联映射需要通过地址中的行号/组号字段来确定映射位置。

记忆要点

全相联映射地址只分两段:Tag + Offset。直接映射和组相联多一个中间段(Index)。

计算套路:先算块内地址位数(log2(块大小)),再用总位数减去块内地址得标记位数。