2020年08月自考 计算机组成原理(02318)

真题详解 -- 零基础版

共30题 | 满分100分 | 含官方答案及逐题详解
一、单项选择题 (每小题1分,共10分)
第1题 1分

十进制数-72的8位补码表示是

A. 01001000

B. 10110111

C. 11001000

D. 10111000

官方答案: D

[知识背景]

在计算机中,负数通常用补码来表示。补码是计算机中最常用的有符号整数表示方法,因为它能让加法和减法使用同一套电路完成。

要理解补码,需要先了解三个概念:

原码:最高位为符号位(0表示正,1表示负),其余位表示数值的绝对值。例如,+72的8位原码是 01001000,-72的8位原码是 11001000。

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

补码:正数的补码与原码相同;负数的补码是在反码的基础上加1。

现在我们来一步步求 -72 的8位补码:

第一步:求72的二进制表示。
72 / 2 = 36 余 0
36 / 2 = 18 余 0
18 / 2 = 9 余 0
9 / 2 = 4 余 1
4 / 2 = 2 余 0
2 / 2 = 1 余 0
1 / 2 = 0 余 1
从下往上读:72 = 1001000(二进制)

第二步:写出-72的8位原码。
符号位为1(负数),数值部分为 1001000,补齐为8位:
原码 = 11001000

第三步:求反码(符号位不变,其余位取反)。
原码 = 1 1001000
反码 = 1 0110111
即反码 = 10110111

第四步:求补码(反码加1)。
反码 = 10110111
加1:10110111 + 1 = 10111000
即补码 = 10111000

因此,-72的8位补码是 10111000。

[逐项分析]
  • A. 01001000 - 错误。最高位为0,表示这是一个正数。实际上 01001000 是 +72 的原码(也是补码),而不是 -72。题目要求的是负数。
  • B. 10110111 - 错误。这是 -72 的反码,不是补码。反码需要再加1才能得到补码。很多考生容易混淆反码和补码,在反码的基础上忘记加1。
  • C. 11001000 - 错误。这是 -72 的原码表示,即直接在 +72 的原码前面把符号位改为1。原码不是计算机中常用的表示方式。
  • D. 10111000 - 正确。这是 -72 的8位补码,通过原码 -> 反码 -> 加1 的步骤得到。
[记忆要点]

负数求补码的口诀:"原码取反加一"。具体步骤:先写出绝对值的二进制,加上符号位1得原码,然后符号位不变、其余位取反得反码,最后反码加1得补码。注意:正数的原码、反码、补码三者相同。本题中四个选项分别对应:A是+72的原码/补码,B是-72的反码,C是-72的原码,D是-72的补码。考试时要特别注意不要在反码这一步就停下来。

[教材出处]

第2章 数据的表示和运算 -- 定点数的补码表示

第2题 1分

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

A. 01000001

B. 11000001

C. 10000010

D. 10000011

官方答案: C

[知识背景]

校验码是一种用于检测数据在传输过程中是否出错的编码方法。最简单的校验码是奇偶校验

偶校验的规则是:在原始数据的基础上增加一个校验位,使得整个编码(包括校验位在内)中"1"的个数为偶数

奇校验则相反,使得"1"的个数为奇数

ASCII码是一种字符编码标准,用7位二进制数来表示一个字符。字符A的ASCII码是 1000001(十进制65)。

本题要求在末位增加偶校验位,传送8位编码。即7位ASCII码在前,第8位(最低位/末位)为校验位。

计算过程:

原始7位ASCII码为:1000001

统计其中"1"的个数:第1位是1,第7位是1,共有2个1

偶校验要求整个8位编码中"1"的总数为偶数。当前已有2个1,2本身就是偶数,所以校验位应该添加0,使得总数仍为偶数(2+0=2,偶数)。

因此,8位编码为:1000001 + 0 = 10000010(7位数据在高位,校验位0在最低位/末位)。

[逐项分析]
  • A. 01000001 - 错误。这个编码是在最高位加了一个0,变成了8位。但题目说的是"末位增加偶校验位",校验位应加在最后(最低位),而不是最前面。
  • B. 11000001 - 错误。这个编码在最高位加了一个1,但校验位应加在末位。并且如果数据中有2个1,再加1个1,总共3个1,是奇数,不满足偶校验的要求。
  • C. 10000010 - 正确。原始ASCII码 1000001 放在高7位,末位(最低位)加上校验位0,得到 10000010。检验:其中1的个数为2(第8位的1和第2位的1),2是偶数,满足偶校验。
  • D. 10000011 - 错误。这个编码末位是1,意味着校验位为1。如果校验位为1,则整个编码中1的个数为3(数据中2个1加上校验位1个1),3是奇数,不满足偶校验的要求。这实际上对应的是奇校验的结果。
[记忆要点]

偶校验口诀:"凑偶数"。先数原始数据中有多少个1,如果已经是偶数个,校验位就补0;如果是奇数个,校验位就补1。注意审题:校验位加在什么位置(最高位还是最低位),这会影响最终编码的排列。本题是"末位增加",即校验位在最后。

[教材出处]

第2章 数据的表示和运算 -- 数据校验码(奇偶校验码)

第3题 1分

采用变址寻址方式的操作数存放在

A. 内存中

B. 通用寄存器中

C. 硬盘中

D. 指令中

官方答案: A

[知识背景]

寻址方式是指CPU如何找到指令中操作数的方法。不同的寻址方式决定了操作数存放的位置和获取操作数的途径。

常见的寻址方式有以下几种:

立即寻址:操作数直接包含在指令中,就是指令的一部分。

寄存器寻址:操作数存放在CPU内部的寄存器中,指令中给出寄存器编号。

直接寻址:指令中直接给出操作数在内存中的地址,操作数存放在内存中。

变址寻址:操作数的有效地址 = 变址寄存器的内容 + 指令中给出的形式地址(偏移量)。这个有效地址指向内存中的某个位置,操作数最终是从内存中取出的。变址寻址特别适用于数组操作,因为可以通过改变变址寄存器的值来依次访问数组的各个元素。

[逐项分析]
  • A. 内存中 - 正确。变址寻址通过"变址寄存器内容 + 形式地址"计算出一个有效地址,然后用这个有效地址去内存中读取操作数。因此操作数最终存放在内存中。
  • B. 通用寄存器中 - 错误。如果操作数在寄存器中,那是"寄存器寻址"方式。虽然变址寻址中用到了变址寄存器(用于存放变址值),但变址寄存器存放的是地址的一部分,不是操作数本身。
  • C. 硬盘中 - 错误。CPU不能直接从硬盘中读取操作数。硬盘属于外部存储器(辅存),CPU只能访问内存(主存),硬盘中的数据必须先调入内存后才能被CPU使用。
  • D. 指令中 - 错误。如果操作数直接在指令中,那是"立即寻址"方式。变址寻址的指令中包含的是形式地址(偏移量),不是操作数本身。
[记忆要点]

记住各种寻址方式操作数的位置:立即寻址 -- 操作数在指令中;寄存器寻址 -- 操作数在寄存器中;直接寻址、间接寻址、变址寻址、基址寻址 -- 操作数都在内存中。简单来说,只要涉及到去内存地址取数据的寻址方式,操作数就在内存中。

[教材出处]

第3章 指令系统 -- 寻址方式(变址寻址)

第4题 1分

若经过CPU处理后的运算结果为零,则反映在条件码寄存器的标志位是

A. ZF

B. OF

C. SF

D. CF

官方答案: A

[知识背景]

CPU在执行算术运算或逻辑运算后,会将运算结果的一些特征记录在一个特殊的寄存器中,这个寄存器叫做条件码寄存器(也叫标志寄存器、状态寄存器、程序状态字寄存器PSW)。

常见的标志位有:

ZF(Zero Flag,零标志位):当运算结果为零时,ZF置1;否则ZF为0。

OF(Overflow Flag,溢出标志位):当有符号数运算发生溢出时,OF置1。

SF(Sign Flag,符号标志位):记录运算结果的符号,即结果的最高位。SF=1表示结果为负。

CF(Carry Flag,进位/借位标志位):当无符号数运算产生进位或借位时,CF置1。

[逐项分析]
  • A. ZF - 正确。ZF就是Zero Flag(零标志),专门用来指示运算结果是否为零。当运算结果为零时ZF=1。
  • B. OF - 错误。OF是Overflow Flag(溢出标志),用于指示有符号数运算是否发生了溢出。
  • C. SF - 错误。SF是Sign Flag(符号标志),反映运算结果的正负号。
  • D. CF - 错误。CF是Carry Flag(进位标志),反映无符号数运算时是否产生了进位或借位。
[记忆要点]

四个标志位的名称来自英文首字母:Zero -> ZF,Overflow -> OF,Sign -> SF,Carry -> CF。每个标志位各司其职:ZF看是否为零,OF看是否溢出,SF看正负号,CF看是否进位。

[教材出处]

第4章 中央处理器 -- 条件码/标志寄存器

第5题 1分

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

A. 指令寄存器

B. 程序计数器

C. 通用寄存器

D. 标志寄存器

官方答案: B

[知识背景]

CPU中有多种寄存器,每种有不同的功能:

程序计数器(PC,Program Counter):存放下一条将要执行的指令的内存地址。每取出一条指令后,PC会自动加上该指令的长度,从而指向下一条指令的地址。

指令寄存器(IR,Instruction Register):用于存放当前正在执行的指令的内容(即指令的二进制编码)。

通用寄存器:用于存放操作数或中间运算结果。

标志寄存器:存放CPU运算后产生的状态标志(如零标志、溢出标志等)。

[逐项分析]
  • A. 指令寄存器 - 错误。IR存放的是当前正在执行的指令的内容(机器码),不是下一条指令的地址
  • B. 程序计数器 - 正确。PC的核心功能就是提供下一条指令的地址。在顺序执行时,PC自动递增;在跳转时,PC被修改为目标地址。
  • C. 通用寄存器 - 错误。通用寄存器用于暂存数据和运算中间结果,不是专门用于存放指令地址的。
  • D. 标志寄存器 - 错误。标志寄存器记录的是运算结果的状态特征,与提供指令地址无关。
[记忆要点]

PC和IR是一对容易混淆的寄存器:PC存地址(下一条指令在哪里),IR存内容(当前指令是什么)。可以这样记:"计数器计地址,寄存器存指令"。

[教材出处]

第4章 中央处理器 -- CPU的基本组成与寄存器

第6题 1分

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

A. $s1=$s2+$s3

B. $s2=$s1+$s3

C. $s3=$s1+$s2

D. $s3=$s1&$s2

官方答案: A

[知识背景]

MIPS是一种经典的精简指令集计算机(RISC)架构。MIPS汇编指令的一般格式为:操作码 目的操作数, 源操作数1, 源操作数2,即 op rd, rs, rt。其中rd是目的寄存器(存放运算结果),rs和rt是源寄存器(提供操作数)。

所以 "add $s1, $s2, $s3" 的含义是:将 $s2 和 $s3 的值相加,结果存入 $s1。即 $s1 = $s2 + $s3。

[逐项分析]
  • A. $s1=$s2+$s3 - 正确。第一个寄存器 $s1 是目的寄存器,$s2 和 $s3 是源寄存器。
  • B. $s2=$s1+$s3 - 错误。目的寄存器是第一个操作数,不是第二个。
  • C. $s3=$s1+$s2 - 错误。把源和目的搞反了。
  • D. $s3=$s1&$s2 - 错误。运算操作也错了,&是按位与,而题目中的指令是 add(加法)。
[记忆要点]

MIPS指令的操作数顺序是"结果在前,来源在后"。记住口诀:"MIPS三操作数,第一个放结果。"这与赋值语句 "a = b + c" 的格式一致。

[教材出处]

第3章 指令系统 -- MIPS指令格式与R型指令

第7题 1分

有一个8MB的主存储器,按字节编址,需要寻址的地址线条数是

A. 3条

B. 13条

C. 23条

D. 33条

官方答案: C

[知识背景]

地址线是CPU与存储器之间连接的信号线之一,用于传递要访问的存储单元的地址。如果有n条地址线,则CPU最多可以区分 2n 个不同的地址。

"按字节编址"意味着每个地址对应存储器中的一个字节(8位)。

计算过程:

8MB = 8 × 1024 × 1024 字节 = 23 × 210 × 210 = 223 字节

要为 223 个字节编址,需要 23条 地址线。

[逐项分析]
  • A. 3条 - 错误。3条地址线只能寻址 23 = 8 个字节(8B),远远不够。
  • B. 13条 - 错误。13条地址线能寻址 213 = 8192 字节 = 8KB。
  • C. 23条 - 正确。8MB = 223 字节,需要 23 条地址线。
  • D. 33条 - 错误。33条地址线能寻址 233 = 8GB。
[记忆要点]

关键是记住单位换算中2的幂次:1KB = 210 B,1MB = 220 B,1GB = 230 B。所以 8MB = 23 × 220 = 223 B,需要23条地址线。做这类题时,把所有数字都转换成2的幂次,然后把指数相加即可。

[教材出处]

第5章 存储器层次结构 -- 主存储器的组织与地址编码

第8题 1分

对硬盘上信息的存取采用

A. ROM方式

B. DAM方式

C. SAM方式

D. RAM方式

官方答案: B

[知识背景]

存储器的访问方式分为以下几种:

RAM(Random Access Memory,随机存取):可以按地址直接访问任意存储单元,访问任何位置所需时间相同。典型代表是内存。

SAM(Sequential Access Memory,顺序存取):必须按数据存储的顺序依次访问。典型代表是磁带

DAM(Direct Access Memory,直接存取):介于随机存取和顺序存取之间。先直接移动到数据所在的大致区域,然后在该区域内顺序搜索。典型代表是磁盘(硬盘)

ROM(Read-Only Memory):ROM描述的是读写特性(只读),而不是存取方式。

[逐项分析]
  • A. ROM方式 - 错误。ROM描述的是存储器的读写属性,不是存取方式。
  • B. DAM方式 - 正确。硬盘工作时,磁头先直接移动到目标磁道(直接定位),然后等待目标扇区转过来(顺序搜索),属于直接存取。
  • C. SAM方式 - 错误。SAM是磁带的存取方式,需从头开始依次读取。
  • D. RAM方式 - 错误。RAM是内存的存取方式,访问任何地址的时间相同。
[记忆要点]

三种存取方式对应的典型设备:RAM -- 内存SAM -- 磁带DAM -- 磁盘/硬盘。可以用生活类比:RAM像翻书直接翻到某一页;SAM像听录音带必须快进;DAM像唱片机,先把唱针放到大致位置,然后等唱片转到目标位置。

[教材出处]

第5章 存储器层次结构 -- 外部存储器(磁盘存储器的存取方式)

第9题 1分

鼠标接口应选用

A. 程序直接控制方式

B. DMA控制方式

C. 中断控制方式

D. 既可选用中断控制方式又可选用DMA控制方式

官方答案: C

[知识背景]

CPU与外部设备之间的数据传送有多种控制方式:

程序直接控制方式:CPU不断地查询外设的状态,效率极低。

中断控制方式:外设准备好数据后,主动向CPU发出中断请求。适用于低速、中速的外设,如键盘、鼠标、打印机等。

DMA控制方式:数据在外设和内存之间直接传送,不经过CPU。适用于高速的外设,如硬盘等。

[逐项分析]
  • A. 程序直接控制方式 - 错误。需要CPU不停轮询,浪费大量CPU时间,效率太低。
  • B. DMA控制方式 - 错误。DMA适用于高速设备的大批量数据传送,鼠标每次传送数据量极小,不需要DMA。
  • C. 中断控制方式 - 正确。鼠标是低速设备,数据量小,使用中断方式最为合适。
  • D. 既可选用中断控制方式又可选用DMA控制方式 - 错误。鼠标不需要DMA,使用DMA不合理。
[记忆要点]

I/O控制方式的选择取决于设备的速度和数据量:低速设备(键盘、鼠标)用中断方式高速设备(硬盘)用DMA方式。口诀:"慢设备用中断,快设备用DMA"。

[教材出处]

第6章 互连及输入输出组织 -- I/O控制方式

第10题 1分

在多重中断方式下,若外设向CPU提出新的中断请求,则CPU

A. 一定会响应

B. 一定不会响应

C. 响应优先级更高的中断请求

D. 响应优先级更低的中断请求

官方答案: C

[知识背景]

单重中断:在CPU处理一个中断的过程中,不允许再响应新的中断请求。

多重中断(中断嵌套):在CPU处理一个中断的过程中,如果又来了一个优先级更高的中断请求,CPU会暂停当前的中断处理,转而处理更高优先级的中断。

核心原则:高优先级的中断可以打断低优先级的中断,但反过来不行

[逐项分析]
  • A. 一定会响应 - 错误。如果新的中断优先级低于或等于当前中断,CPU不会响应。
  • B. 一定不会响应 - 错误。这描述的是单重中断的情况。
  • C. 响应优先级更高的中断请求 - 正确。多重中断的核心机制就是:只允许优先级更高的中断打断当前的中断处理。
  • D. 响应优先级更低的中断请求 - 错误。与多重中断的原则完全相反。
[记忆要点]

多重中断的核心原则:"高可以打断低,低不能打断高"。类比:你正在处理一件普通工作,突然领导来了紧急任务,你会放下手头的工作先处理紧急任务。

[教材出处]

第6章 互连及输入输出组织 -- 中断系统(多重中断与中断优先级)

二、填空题 (每空1分,共15分)
第11题 3分

在计算机系统中,常用的进位记数制有二进制、____进制、____进制和____进制。

官方答案

八、十、十六

[知识背景]

"进位记数制"是一种用有限个数字符号,按照某种规则来表示数值的方法。"进制"就是"逢几进一"的意思。

在计算机系统中,常用的进位记数制有四种:

  • 二进制(基数为2):使用0和1两个符号,逢二进一。计算机内部采用二进制,因为电子器件天然具有两种稳定状态。
  • 八进制(基数为8):使用0-7共8个符号。每3位二进制数对应1位八进制数(因为 23=8)。
  • 十进制(基数为10):使用0-9共10个符号,人类日常使用的记数制。
  • 十六进制(基数为16):使用0-9和A-F共16个符号。每4位二进制数对应1位十六进制数(因为 24=16),在现代编程中广泛使用。
[详细解析]

八进制和十六进制是二进制的"快捷写法",可以用更短的字符串表示较长的二进制数。由于现代计算机的数据位宽通常是4的倍数(8位、16位、32位、64位),十六进制比八进制更加常用。

[记忆要点]

计算机中四种常用进制按基数从小到大:二、八、十、十六。口诀:"二八十十六,进制要记住"。

[教材出处]

第2章 数据的表示和运算 -- 进位记数制

第12题 3分

定点数编码表示方法主要有以下4种:原码、____、____和____。

官方答案

补码、反码、移码

[知识背景]

为了在计算机中表示带符号的定点数,人们发明了多种编码方法:

  • 原码:最直观的编码,符号位0正1负,数值部分是绝对值。缺点是零有两种表示,加减运算复杂。
  • 补码:最重要、最常用的编码。正数同原码,负数 = 反码 + 1。优点是加减法可统一用加法电路实现,零只有一种表示。
  • 反码:正数同原码,负数的数值位各位取反。主要作为求补码的中间步骤。
  • 移码:真值加上一个固定的偏移量(通常为 2n-1)。移码的大小顺序与真值一致,主要用于浮点数的阶码部分。
[详细解析]

核心关系链:原码 -> 数值位取反 -> 反码 -> 末位加1 -> 补码 -> 符号位取反 -> 移码。

使用场景:补码用于整数运算(最常用)、移码用于浮点数阶码、原码用于浮点数尾数、反码是求补码的中间步骤。

[记忆要点]

四种编码的记忆口诀:"原补反移"。

[教材出处]

第2章 数据的表示和运算 -- 定点数的编码表示

第13题 2分

MIPS指令采用三种指令格式,分别是R-型指令、____和____。

官方答案

I-型指令、J-型指令

[知识背景]

MIPS所有指令都是32位长,但根据功能不同划分为三种格式:

  • R-型指令(Register型):用于寄存器之间的操作,有6个字段:op(6) + rs(5) + rt(5) + rd(5) + shamt(5) + funct(6)。
  • I-型指令(Immediate型):涉及立即数或访存操作,有4个字段:op(6) + rs(5) + rt(5) + immediate(16)。
  • J-型指令(Jump型):用于无条件跳转,有2个字段:op(6) + address(26)。
[详细解析]

三种格式的首字母R、I、J分别对应Register(寄存器操作)、Immediate(立即数操作)、Jump(跳转操作)。字段数量递减:R-型6个、I-型4个、J-型2个,因为需要更长的立即数/地址字段。

[记忆要点]

口诀:"R寄存器算,I立即数搬,J跳转转"。所有格式都是32位,op字段都是最高6位。

[教材出处]

第3章 指令系统 -- MIPS指令格式

第14题 2分

指令流水线在有些情况下会发生流水线冒险,包括结构冒险、____和____。

官方答案

数据冒险、控制冒险

[知识背景]

流水线技术让多条指令的不同阶段在时间上重叠执行,提高指令吞吐率。但某些情况会导致流水线无法正常推进,称为"流水线冒险"。

[详细解析]
  • 结构冒险(资源冲突):多条指令同时需要使用同一个硬件资源。解决:增加硬件资源或暂停流水线。
  • 数据冒险(数据相关):后面的指令需要使用前面指令尚未产生的运算结果。解决:数据转发/旁路、指令重排序。
  • 控制冒险(分支冒险):分支指令改变了程序执行顺序,导致已取的后续指令可能是错误的。解决:分支预测、延迟分支。
[记忆要点]

口诀:"结数控"(谐音"结束控")。对应关系:结构冒险 -- "抢设备",数据冒险 -- "等数据",控制冒险 -- "猜方向"。

[教材出处]

第4章 中央处理器 -- 指令流水线与流水线冒险

第15题 2分

虚拟存储器分成三种不同类型:分页式、____和____。

官方答案

分段式、段页式

[知识背景]

虚拟存储器用大容量的辅存(硬盘)来扩展小容量的主存(内存),给程序员提供一个容量巨大的"虚拟"存储空间。

[详细解析]
  • 分页式:按固定大小的"页"划分,管理简单,不会产生外部碎片,但不考虑程序逻辑结构。
  • 分段式:按程序逻辑结构划分为不同大小的"段",便于模块化管理和共享保护,但会产生外部碎片。
  • 段页式:先按逻辑分段,再在段内分页,结合两者优点,是现代操作系统最常用的方式。
[记忆要点]

逻辑是"页 + 段 = 段页"。分页按固定大小切,分段按逻辑结构切,段页式结合两者。

[教材出处]

第5章 存储器层次结构 -- 虚拟存储器

第16题 3分

系统总线通常由____线、____线和____线等三组线构成。

官方答案

数据、地址、控制

[知识背景]

系统总线是连接CPU、主存、I/O接口等主要部件的信息传送通道。

[详细解析]
  • 数据总线(DB):双向,传输数据信息。总线宽度(位数)决定一次能传输的数据量。
  • 地址总线(AB):通常单向(CPU发出),传输地址信息。位数决定可寻址的内存空间大小。
  • 控制总线(CB):传输控制信号(如读/写信号、中断请求等),协调各部件操作。

三组总线分别解决"传什么"、"在哪里"和"怎么做"的问题。

[记忆要点]

用问句来记忆:"传什么?-- 数据线"、"在哪里?-- 地址线"、"怎么做?-- 控制线"。

[教材出处]

第6章 互连及输入输出组织 -- 总线的基本概念

三、名词解释题 (每小题3分,共15分)
第17题 3分

数据通路

官方答案

数据通路是指指令执行过程中数据所流经的部件,其中包含各类运算部件。

[知识背景]

CPU执行一条指令时,数据需要从一个地方"流动"到另一个地方。比如做加法运算,两个操作数需要从寄存器中取出,送到ALU中计算,结果再送回寄存器保存。这一路上,数据经过的所有"路径"和"部件",就构成了数据通路。

[详细解析]

数据通路的组成部分包括:寄存器、算术逻辑单元(ALU)、内部总线、多路选择器(MUX)、移位器等。数据通路负责"执行"(数据的传送和运算),而控制器负责"指挥"(发出控制信号)。两者共同组成CPU的核心。

[记忆要点]

数据通路 = 数据流经的部件 + 运算部件。抓住两个关键词:"数据流经""运算部件"

[教材出处]

第4章 中央处理器 -- 数据通路的功能和基本结构

第18题 3分

机器数

官方答案

将数值数据在计算机内部编码表示的数称为机器数。

[知识背景]

计算机内部只认识0和1,无法直接表示"+""-"等符号。因此需要把数字(包括正负号)全部用0和1来编码表示。这种经过编码后在计算机内部存储和处理的数,就叫做"机器数"。与之对应的是"真值",即日常书写的带正负号的实际数值。

[详细解析]

机器数的核心特征:符号数字化(正号用0表示,负号用1表示);位数固定(如8位、16位、32位);有多种编码方式(原码、反码、补码、移码)。

[记忆要点]

机器数 = 数值数据在计算机内部的编码表示。配对记忆:真值是人看的数,机器数是机器看的数。

[教材出处]

第2章 数据的表示和运算 -- 数值数据的表示

第19题 3分

小端方式

官方答案

小端方式将数据的最高有效字节MSB存放在高地址中,将最低有效字节LSB存放在低地址中。

[知识背景]

当存储一个多字节数据(如32位整数占4字节)时,这些字节按什么顺序存放在内存中?这就涉及到"字节序"(Byte Order)。

MSB(Most Significant Byte):最高有效字节,权值最大的字节。LSB(Least Significant Byte):最低有效字节,权值最小的字节。

[详细解析]

小端方式:低地址存放低字节(LSB),高地址存放高字节(MSB)。例如 0x12345678 从地址0x1000开始,小端存放为:0x1000存0x78,0x1001存0x56,0x1002存0x34,0x1003存0x12。Intel x86处理器采用小端方式。

[记忆要点]

小端方式:"低低小端"(低字节放低地址就是小端)。联想:小端 = 小的在前面(低地址)。

[教材出处]

第2章 数据的表示和运算 -- 数据的存储和排列顺序

第20题 3分

寄存器直接寻址

官方答案

指令中给出的是操作数所在的寄存器编号,操作数在寄存器中,这种寻址方式称为寄存器直接寻址。

[知识背景]

"寻址方式"就是指令中告诉CPU"去哪里找操作数"的方法。寄存器直接寻址是其中一种:指令给出寄存器编号,CPU直接到对应的寄存器中取出操作数,不需要访问内存,速度很快。

[详细解析]

寄存器直接寻址的三个关键点:(1)指令中给的是寄存器编号;(2)操作数在寄存器中;(3)是"直接"寻址,寄存器中存的就是操作数本身。优点是速度快(不需访存),指令短(寄存器编号位数少)。

[记忆要点]

区别于"寄存器间接寻址":直接寻址 -- 寄存器中存的是操作数本身;间接寻址 -- 寄存器中存的是操作数的地址,还要再去内存找一次。

[教材出处]

第3章 指令系统 -- 操作数寻址方式

第21题 3分

中断嵌套

官方答案

中断系统允许CPU在执行某个中断服务程序时,被新的中断请求打断。

[知识背景]

中断嵌套就是"中断中再中断"。当CPU正在处理一个中断时,如果来了一个优先级更高的中断请求,CPU会暂停当前中断服务程序,转而处理更高优先级的中断,处理完后再回来继续处理之前的中断。

[详细解析]

中断嵌套的条件:新中断的优先级必须高于当前正在处理的中断;CPU的中断允许标志必须处于开中断状态。中断嵌套保证了高优先级事件能得到及时响应。

[记忆要点]

中断嵌套 = 正在执行中断服务程序时,被新的(更高优先级的)中断请求打断。联想为"大事打断小事"。

[教材出处]

第6章 互连及输入输出组织 -- 中断系统(中断嵌套)

四、简答题 (每小题5分,共20分)
第22题 5分

浮点加减运算需要经过哪几个主要步骤?

官方答案

对阶(1分)、尾数相加减(1分)、规格化(1分)、尾数舍入(1分)和溢出判断等(1分)。

[知识背景]

浮点数由阶码(指数)和尾数(有效数字)组成:N = M × 2E。要对两个浮点数做加减法,必须先让它们的"阶"一致(小数点对齐),这是浮点运算与定点运算最大的不同。

[详细解析]

第一步:对阶 -- 让两个浮点数的阶码一致。规则:小阶向大阶看齐(阶码小的尾数右移,阶码增大)。

第二步:尾数相加减 -- 对阶完成后,两个数的阶码相同,直接对尾数进行加减运算。

第三步:规格化 -- 调整结果使尾数符合标准格式(左规或右规)。

第四步:尾数舍入 -- 对阶和右规中尾数右移可能丢失低位,需要舍入处理以减小误差。

第五步:溢出判断 -- 检查结果的阶码是否超出范围。阶码上溢表示结果太大(溢出),阶码下溢表示结果趋近于零。

[记忆要点]

五个步骤的首字可组成口诀:"对尾规舍溢"。联想记忆:"对位以后算,算完要规范,不精确就四舍五入,最后检查有没有爆表"。

[教材出处]

第2章 数据的表示和运算 -- 浮点数的加减运算

第23题 5分

转移指令和调用(转子)指令的区别是什么?

官方答案

转移指令和调用(转子)指令的区别在于执行调用(转子)指令时必须保存下条指令的地址(即返回地址)(2分);调用(转子)指令用于过程调用或函数调用,当被调用过程执行结束时,根据返回地址返回到调用过程继续执行,(2分)而转移指令则不返回执行,因而无需保存返回地址。(1分)

[知识背景]

用生活比喻来理解两者的区别:

  • 转移指令好比看书时被告知"请翻到第100页继续看",你翻过去后就不回来了。这是一条"单程票"。
  • 调用指令好比看书时被告知"请先看附录A的内容",你先夹一个书签(保存返回地址),看完附录A后根据书签回来继续看。这是一张"往返票"。
[详细解析]
比较项转移指令调用(转子)指令
是否保存返回地址不保存保存(压栈或存入特定寄存器)
是否返回不返回,单向跳转返回,执行完子程序后回到调用点
用途实现循环、条件分支(if-else)实现函数调用、过程调用
配对指令无配对指令与RET(返回指令)配对使用
[记忆要点]

核心区别就一句话:调用指令要保存返回地址,转移指令不保存。联想记忆:转移 = "搬家"(走了不回来);调用 = "出差"(出去办事还要回来)。

[教材出处]

第3章 指令系统 -- 程序控制类指令

第24题 5分

什么是指令周期?不同指令的指令执行周期是否一致?

官方答案

CPU取出并执行一条指令的时间为一个指令周期(3分),可分为取指令、读操作数、执行并写结果等多个基本工作周期;不同指令的指令执行周期一般不一致,主要与操作数寻址方式以及存结果的地址等有关。(2分)

[知识背景]

先区分三个容易混淆的"周期"概念:

  • 时钟周期(节拍):CPU工作的最小时间单位,由主频决定。
  • 机器周期:CPU完成一个基本操作(如访问一次内存)所需的时间,由若干个时钟周期组成。
  • 指令周期:CPU取出并执行完一条指令所需的全部时间,由若干个机器周期组成。

它们的关系:指令周期 > 机器周期 > 时钟周期。

[详细解析]

不同指令的指令周期一般不一致,原因:(1)寻址方式不同导致访存次数不同;(2)操作类型不同(如乘法比加法慢);(3)结果存放位置不同(存寄存器比存内存快)。

[记忆要点]

(1)指令周期 = CPU取出并执行完一条指令的时间。(2)不同指令的指令周期一般不一致。(3)三种周期大小:时钟周期 < 机器周期 < 指令周期。

[教材出处]

第4章 中央处理器 -- CPU的工作原理和指令执行过程

第25题 5分

在中断响应周期中,通过执行一条隐指令,可以完成哪几项操作?

官方答案

在中断响应周期中,通过执行一条隐指令,可以完成的操作是:(1)关中断:将中断允许标志置为禁止状态(2分)(2)保护断点:将PC和PSW存入栈或特殊寄存器(2分)(3)识别中断源并转中断服务程序:通过某种方式,获得优先级最高的中断源对应的中断服务程序的首地址和初始PSW,并分别送PC和PSWR。(1分)

[知识背景]

"隐指令"是CPU在中断响应时由硬件自动完成的操作,不是程序员编写的指令,也不出现在程序中。它在程序员看来是"隐形"的。

[详细解析]

隐指令完成的三项操作:

  1. 关中断:将中断允许标志位置为禁止状态。目的是防止在保存断点信息的过程中被新的中断打断,保证操作的原子性。
  2. 保护断点:将当前的PC(返回地址)和PSW(程序状态字)保存到栈或特殊寄存器中。这样中断处理完毕后才能回到被打断的位置继续执行。
  3. 识别中断源并转中断服务程序:确定是哪个设备发出的中断请求,获取对应的中断服务程序入口地址送入PC,开始执行中断服务程序。

注意:"保护现场"(保存通用寄存器)是中断服务程序中的软件操作,不属于隐指令。

[记忆要点]

隐指令完成三件事,口诀:"关、保、转"。关中断 -- 保护断点 -- 转中断服务程序。顺序不能搞反。

[教材出处]

第6章 互连及输入输出组织 -- 中断系统(中断响应过程)

五、计算题 (共16分)
第26题 6分

假设某个频繁使用的程序P在机器M1上运行需要15S,M1的时钟频率为2GHz。设计人员想开发一台与M1具有相同ISA的新机器M2。采用新技术可使M2的时钟频率增加,但同时也会使CPI增加。假定P在M2上执行时的时钟周期数是在M1上的3倍,则M2的时钟频率至少达到多少才能使程序P在M2上的运行时间缩短为10S?

官方答案

程序P在机器M1上的时钟周期数为 CPU执行时间 × 时钟频率 = 15S × 2GHz = 30G

因此,程序P在机器M2上的时钟周期数为 3 × 30G = 90G

要使程序P在M2上的运行时间缩短为10S,则M2的时钟频率至少应为 程序所含时钟周期数 / CPU执行时间 = 90G / 10S = 9GHz

[知识背景]

CPU性能公式(核心公式):CPU执行时间 = 程序的时钟周期总数 / 时钟频率

GHz(吉赫兹)= 109Hz = 每秒10亿次。时钟频率就是CPU每秒产生的时钟脉冲数。CPI是"每条指令所需的时钟周期数"的平均值。ISA相同意味着同一程序执行的指令条数相同。

[详细解析]

第一步:求程序P在M1上的时钟周期总数

时钟周期总数 = CPU执行时间 × 时钟频率 = 15S × 2GHz = 15 × 2 × 109 = 30 × 109(即300亿个时钟周期)

第二步:求程序P在M2上的时钟周期总数

M2上的时钟周期总数 = 3 × 30G = 90G(即900亿个时钟周期)

第三步:求M2所需的最低时钟频率

时钟频率 = 时钟周期总数 / CPU执行时间 = 90G / 10S = 9GHz

验证:如果M2频率为9GHz,CPU执行时间 = 90G / 9GHz = 10S,正确。

[记忆要点]

核心公式:CPU执行时间 = 时钟周期总数 / 时钟频率。提高频率可以缩短执行时间,但如果CPI也增加,总周期数会增大,需要频率提高幅度大于CPI增加幅度才能真正提升性能。

[教材出处]

第1章 计算机系统概述 -- 计算机性能指标

第27题 6分

将十进制数160转换为IEEE754的单精度(32位)浮点数格式,要求最后格式用十六进制数表示。

官方答案

(1) (160)10 = (10100000)2

(2) 规格化:1.0100000 × 27

(3) 阶码E = 127 + 7 = 134 = (10000110)2

(4) S=0, E=10000110, M=01000000000000000000000

(5) 32位二进制:0 10000110 01000000000000000000000

(6) 十六进制:(43200000)16

[知识背景]

IEEE 754单精度(32位)格式

符号位S1位
阶码E8位
尾数M23位

实际值 = (-1)S × 1.M × 2(E-127)。偏置值为127。规格化后整数部分的"1"隐含不存储。

[详细解析]

第一步:确定符号位 -- 160是正数,S = 0

第二步:十进制转二进制

160 ÷ 2 = 80 ... 余 0  |  80 ÷ 2 = 40 ... 余 0  |  40 ÷ 2 = 20 ... 余 0  |  20 ÷ 2 = 10 ... 余 0

10 ÷ 2 = 5 ... 余 0  |  5 ÷ 2 = 2 ... 余 1  |  2 ÷ 2 = 1 ... 余 0  |  1 ÷ 2 = 0 ... 余 1

从下往上读:10100000(验证:128+32=160)

第三步:规格化

10100000 = 1.0100000 × 27(小数点左移7位)

第四步:计算阶码E

E = 偏置值 + 阶码真值 = 127 + 7 = 134 = 100001102(验证:128+4+2=134)

第五步:组装尾数M(23位)

隐含整数"1"不存储,取小数部分:01000000000000000000000

第六步:拼接32位

0 | 10000110 | 01000000000000000000000

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

0100 | 0011 | 0010 | 0000 | 0000 | 0000 | 0000 | 0000

  4     3     2     0     0     0     0     0

结果:(43200000)16

[记忆要点]

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

[教材出处]

第2章 数据的表示和运算 -- IEEE 754浮点数表示

第28题 4分

假定某同步总线在一个总线时钟周期内传送一个16字节的数据,总线时钟频率为80MHz,则总线带宽是多少?如果总线宽度改为256位,一个时钟周期能传送两次数据,总线时钟频率为200MHz,则总线带宽是多少?

官方答案

根据总线的总带宽计算公式:B = W × F / N

本题总线的总带宽为:B = 16B × 80MHz / 1 = 1280MB/s

改进后:B = (256/8)B × 200MHz / 0.5 = 12800MB/s

[知识背景]

总线带宽是单位时间内总线能传输的最大数据量。公式:B = W × F / N,其中W=每次传输的字节数,F=时钟频率,N=完成一次传送所需的时钟周期数。

[详细解析]

第一问:W=16B, F=80MHz, N=1

B = 16 × 80 × 106 / 1 = 1280MB/s

第二问:W=256位=32B, F=200MHz, 每周期传两次 -> N=0.5

B = 32 × 200 × 106 / 0.5 = 12800MB/s

带宽提升10倍(宽度2倍 × 频率2.5倍 × 传输次数2倍 = 10倍)

[记忆要点]

核心公式:B = W × F / N。注意单位换算:位(bit)转字节(Byte)要除以8。N=0.5表示一个周期传两次(类似DDR技术)。

[教材出处]

第6章 互连及输入输出组织 -- 总线的性能指标

六、综合题 (每小题12分,共24分)
第29题 12分

某计算机主存地址空间大小64MB,按字节编址。主存与cache之间采用直接映射方式,块大小为2K字节。cache数据区大小为64KB。

(1) 该cache共有多少行?

(2) 主存地址需多少位?如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。

官方答案

(1) 64KB / 2KB = 32行

(2) 64MB = 226B,故主存地址长度为26位,划分为:标记(10位) + 行号(5位) + 块内地址(11位)

[知识背景]

Cache是位于CPU和主存之间的高速缓冲存储器。直接映射规定主存中的每一块只能存放到Cache中固定的一行(Cache行号 = 主存块号 mod Cache总行数)。

主存地址在直接映射中被划分为三个字段:标记(Tag)用来区分映射到同一Cache行的不同主存块;行号(Index)确定数据对应的Cache行;块内地址(Offset)确定数据在块内的位置。

[详细解析]

第(1)题:求Cache的行数

Cache行数 = Cache数据区大小 / 块大小 = 64KB / 2KB = 216 / 211 = 25 = 32行

第(2)题:主存地址位数和划分

主存地址总位数:64MB = 226B,需要26位地址

块内地址:2KB = 211B -> 11位(最低11位)

行号:32行 = 25 -> 5位(中间5位)

标记:26 - 11 - 5 = 10位(最高10位)

主存地址格式图:

标记(Tag)10位
行号(Index)5位
块内地址(Offset)11位

验证:10 + 5 + 11 = 26位,正确。

[记忆要点]

地址划分三步走:先定块内地址(取决于块大小),再定行号(取决于Cache行数),最后标记是剩余位数。位数计算的关键:有2n个项目就需要n位来编号。

[教材出处]

第5章 存储器层次结构 -- Cache的基本原理与直接映射

第30题 12分

某计算机字长16位,采用16位定长指令格式,部分数据通路结构如题30图所示。假设MAR的输出一直处于使能状态。

(1) 逻辑指令"AND R2, (R1)"在执行阶段需要多少个节拍?该指令功能为 R[R2] ← R[R2] AND M[R[R1]]。

(2) 写出每个节拍的有效控制信号和功能。

官方答案

(1) 需要4个或5个节拍

(2) 控制信号和功能:

  • 节拍1: R1out, MARin → MAR ← (R1)
  • 节拍2: MemR → MDR ← M(MAR)
  • 节拍3: MDRout, Yin → Y ← (MDR)
  • 节拍4: R2out, AND → Z ← (Y) AND (R2)
  • 节拍5: Zout, R2in → R2 ← (Z)

说明:如果答案为4个节拍,则将节拍2与节拍3合并为一个节拍。

[知识背景]

数据通路中的关键部件:

  • MAR(存储器地址寄存器):存放要访问的内存地址。
  • MDR(存储器数据寄存器):暂存从内存读出的数据或要写入内存的数据。
  • Y寄存器:ALU的一个输入端暂存器。ALU需要两个操作数,一个从Y获取,一个从总线获取。
  • Z寄存器:ALU运算结果的暂存器。
  • ALU:执行算术和逻辑运算。

指令 AND R2, (R1) 的含义:R2中的值 与 内存中地址为R1处的值 做AND运算,结果存回R2。(R1)表示寄存器间接寻址。

[详细解析]

节拍1:将R1的内容送入MAR

控制信号:R1out, MARin

功能:MAR ← (R1)    数据流向:R1 → 内部总线 → MAR

说明:R1中存放的是内存地址,送入MAR为下一步的内存读操作做准备。

节拍2:从内存读取数据到MDR

控制信号:MemR

功能:MDR ← M(MAR)    数据流向:内存[MAR指向的地址] → 数据总线 → MDR

说明:MemR信号通知内存进行读操作,数据被送到MDR中锁存。

节拍3:将MDR的内容送入Y寄存器

控制信号:MDRout, Yin

功能:Y ← (MDR)    数据流向:MDR → 内部总线 → Y

说明:ALU的一个操作数先存到Y,为下一步运算做准备。节拍2和3可合并为4节拍方案。

节拍4:执行AND运算

控制信号:R2out, AND

功能:Z ← (Y) AND (R2)    数据流向:Y + R2(通过总线) → ALU → Z

说明:R2通过总线送入ALU的一个输入端,Y已连接ALU另一个输入端,结果存入Z。

节拍5:将运算结果存回R2

控制信号:Zout, R2in

功能:R2 ← (Z)    数据流向:Z → 内部总线 → R2

说明:运算结果从Z经总线写入R2,指令执行完毕。

完整执行过程总结

节拍控制信号功能数据流向
1R1out, MARinMAR ← (R1)R1 → 总线 → MAR
2MemRMDR ← M(MAR)内存 → MDR
3MDRout, YinY ← (MDR)MDR → 总线 → Y
4R2out, ANDZ ← (Y) AND (R2)Y + R2 → ALU → Z
5Zout, R2inR2 ← (Z)Z → 总线 → R2
[记忆要点]

1. 每个节拍只能完成一个"数据传送"操作(总线同一时刻只能传一个数据)。

2. ALU运算:一个操作数通过Y寄存器提供,一个通过总线直接提供,结果存入Z寄存器。

3. 寄存器间接寻址 (R1) 的处理:先把寄存器值送MAR,再通过MAR去内存取数。

4. 控制信号命名规律:"XXXout"打开输出门,"XXXin"使能输入端,"MemR"内存读。

[教材出处]

第4章 中央处理器 -- 数据通路与控制信号