2022年04月自考 计算机组成原理(02318)

真题详解 -- 零基础版

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

下列选项中表示计算机浮点操作速度的指标是

A. CPI

B. MIPS

C. MFLOPS

D. 时钟频率

官方答案:C

[知识背景]

计算机的性能可以用多种指标来衡量,不同的指标反映了计算机不同方面的能力。常见的性能指标包括:

  • CPI(Cycles Per Instruction):每条指令所需的时钟周期数,用于衡量指令执行效率。CPI越小,说明每条指令花的时间越少,CPU效率越高。
  • MIPS(Million Instructions Per Second):每秒执行百万条指令数,衡量的是CPU整体的指令执行速度,但它不区分指令类型。
  • MFLOPS(Million Floating-point Operations Per Second):每秒执行百万次浮点运算数,专门用于衡量计算机的浮点运算能力。浮点运算在科学计算、图形处理等领域极为重要。
  • 时钟频率:CPU内部时钟信号的频率,单位为Hz。时钟频率越高,一个时钟周期越短,但不能直接反映浮点运算速度。
[逐项分析]

A. CPI -- 错误。CPI是"每条指令的平均时钟周期数",它衡量的是指令执行效率,不是专门针对浮点操作的速度指标。

B. MIPS -- 错误。MIPS是"每秒百万条指令数",衡量的是通用指令的执行速度,它不区分整数指令和浮点指令,因此不是浮点操作速度指标。

C. MFLOPS -- 正确。MFLOPS全称为Million Floating-point Operations Per Second,即"每秒百万次浮点运算",这正是专门衡量计算机浮点操作速度的指标。其中F就代表Floating-point(浮点)。

D. 时钟频率 -- 错误。时钟频率反映的是CPU内部时钟振荡的快慢,虽然它影响计算机整体速度,但并不能直接反映浮点运算的速度。

[记忆要点]

记住MFLOPS中的关键字母"FL",代表"FLoating-point"(浮点),凡是看到"浮点操作速度"就选MFLOPS。类似地,MIPS中的"I"代表"Instruction"(指令),衡量的是通用指令速度。两者的区别在于:MIPS衡量整数/通用指令速度,MFLOPS衡量浮点运算速度。

[教材出处]

第1章 -- 计算机系统概述。本章介绍了计算机的性能指标,包括时钟频率、CPI、MIPS、MFLOPS等概念及其含义。

第2题 (1分)

IEEE754单精度(32位)浮点数表示格式中,移码表示的阶码偏置常数是

A. 127

B. 128

C. 255

D. 256

官方答案:A

[知识背景]

IEEE 754是国际标准的浮点数表示规范。单精度浮点数(32位)的格式如下:

  • 1位符号位S(最高位)
  • 8位阶码E(指数部分)
  • 23位尾数M(有效数字部分)

阶码部分采用"移码"(也叫偏移码)表示法。所谓移码,就是将真实的指数值加上一个固定的偏置常数(bias),得到存储在计算机中的阶码值。这样做的好处是可以把有符号的指数变成无符号数来存储和比较。

IEEE 754标准规定,对于k位的阶码,偏置常数为 2^(k-1) - 1。单精度浮点数的阶码有8位,所以偏置常数 = 2^(8-1) - 1 = 2^7 - 1 = 128 - 1 = 127。

注意:这里的偏置常数127与传统的移码偏置常数128不同。传统移码的偏置常数是2^(k-1) = 128,而IEEE 754标准采用的是2^(k-1) - 1 = 127。这是一个需要特别注意的区别。

[逐项分析]

A. 127 -- 正确。IEEE 754单精度浮点数的阶码偏置常数为 2^(8-1) - 1 = 127。存储的阶码值 = 真实指数 + 127。例如真实指数为0时,存储的阶码值为127(二进制01111111)。

B. 128 -- 错误。128 = 2^7 是传统移码的偏置常数,但IEEE 754标准并未采用这个值。很多考生容易混淆传统移码和IEEE 754移码的偏置常数,这是一个常见的陷阱。

C. 255 -- 错误。255 = 2^8 - 1,这是8位阶码能表示的最大无符号整数值,在IEEE 754中被保留用于表示无穷大和NaN(非数),不是偏置常数。

D. 256 -- 错误。256 = 2^8,超出了8位二进制所能表示的范围(0~255),不可能是偏置常数。

[记忆要点]

IEEE 754的偏置常数公式:bias = 2^(k-1) - 1。单精度k=8,bias = 127;双精度k=11,bias = 1023。记住关键点:"IEEE 754比传统移码少1"。传统移码偏置常数是2^(k-1)=128,IEEE 754是2^(k-1)-1=127。

[教材出处]

第2章 -- 数据的表示和运算。本章详细介绍了IEEE 754浮点数标准,包括单精度和双精度浮点数的格式、阶码的移码表示及偏置常数的计算。

第3题 (1分)

在计算机中,浮点数加减运算的对阶操作是

A. 阶码较小的数,阶码增大,尾数右移

B. 阶码较小的数,阶码增大,尾数左移

C. 阶码较大的数,阶码减小,尾数左移

D. 阶码较大的数,阶码减小,尾数右移

官方答案:A

[知识背景]

浮点数的加减运算不像整数运算那样简单,因为浮点数由阶码(指数)和尾数两部分组成。两个浮点数要进行加减运算,必须先使它们的阶码相同(即小数点对齐),这个过程称为"对阶"。

对阶的基本原则是"小阶向大阶看齐",即把阶码较小的那个数的阶码增大到与阶码较大的数相同。阶码每增大1,相当于尾数的小数点向左移一位,也就是尾数要右移一位。

为什么不采用"大阶向小阶看齐"呢?因为如果大阶减小,尾数就需要左移。左移可能导致尾数的高位数字移出,造成大的数值精度损失甚至溢出。而右移只是丢失尾数的低位,损失的精度较小,这在工程上是可以接受的。

举个简单例子:假设有两个十进制浮点数 1.23 x 10^5 和 4.56 x 10^2。对阶时应将后者的阶码从2增大到5,尾数相应右移3位,变为 0.00456 x 10^5,然后两数就可以直接相加了。

[逐项分析]

A. 阶码较小的数,阶码增大,尾数右移 -- 正确。这正是"小阶向大阶看齐"的操作:阶码较小的数,其阶码增大以与较大阶码对齐,同时尾数右移以保持数值不变。阶码增大1,尾数右移1位,两者的效果相互抵消,保证数值等价。

B. 阶码较小的数,阶码增大,尾数左移 -- 错误。阶码增大时尾数应该右移,而不是左移。如果阶码增大的同时尾数也左移,数值就会被放大了两次,结果不等价。

C. 阶码较大的数,阶码减小,尾数左移 -- 错误。虽然阶码减小配合尾数左移可以保持数值不变,但这种"大阶向小阶看齐"的方式会导致尾数左移时高位溢出,造成严重的精度损失,因此实际中不采用这种方式。

D. 阶码较大的数,阶码减小,尾数右移 -- 错误。阶码减小应配合尾数左移才能保持数值不变,这里尾数右移是错误的方向,会导致数值被缩小了两次。

[记忆要点]

记住口诀:"小阶向大阶看齐,尾数右移"。核心逻辑是:阶码变大等价于尾数变小(右移),两个操作同时进行,数值保持不变。选择"小向大看齐"而非"大向小看齐"是为了减少精度损失(右移只丢低位,左移会丢高位)。

[教材出处]

第2章 -- 数据的表示和运算。本章介绍了浮点数加减运算的步骤:对阶、尾数加减、规格化、舍入、溢出判断,其中对阶是第一步也是最关键的一步。

第4题 (1分)

8位二进制定点整数的补码X表示范围是

A. -128 < X < 128

B. -128 < X ≤ 128

C. -128 ≤ X ≤ 127

D. -128 ≤ X ≤ 128

官方答案:C

[知识背景]

在计算机中,有符号整数通常采用补码表示法。补码的最大优点是可以将减法转化为加法,简化硬件电路设计。

对于n位二进制补码整数(包含1位符号位):

  • 最高位是符号位:0表示正数,1表示负数。
  • 能表示的范围为:-2^(n-1) 到 2^(n-1) - 1。
  • 负数比正数多一个,因为补码中0只有一种表示(全0),不像原码那样有+0和-0之分,多出的那个编码(最高位为1,其余全0)被用来表示最小的负数。

对于8位补码整数:n=8,所以范围为 -2^7 到 2^7 - 1,即 -128 到 127。

  • 最大正数:01111111 = 127
  • 最小负数:10000000 = -128
  • 零:00000000 = 0
[逐项分析]

A. -128 < X < 128 -- 错误。这个范围是 -127 到 127,排除了 -128。但8位补码可以表示 -128(即10000000),所以下界应该能取到 -128。

B. -128 < X ≤ 128 -- 错误。首先下界不能取到 -128 是错的(应该能取到);其次上界128也是错的,因为8位补码最大只能表示127,无法表示128。

C. -128 ≤ X ≤ 127 -- 正确。8位补码整数的表示范围恰好是 -128 到 127,两端都能取到。负数最多到 -128,正数最多到 127,总共能表示256个不同的整数。

D. -128 ≤ X ≤ 128 -- 错误。下界 -128 是对的,但上界128是错的。8位补码最大的正数是01111111 = 127,不可能表示128。

[记忆要点]

n位补码整数范围公式:-2^(n-1) 到 2^(n-1) - 1。关键记忆点:"负数比正数多一个"。8位时就是 -128 到 +127。可以这样理解:8位共有256种编码(2^8),其中0占一个,正数127个(1到127),负数128个(-1到-128),合计 1+127+128 = 256。

[教材出处]

第2章 -- 数据的表示和运算。本章介绍了原码、反码、补码的表示方法以及各种编码的表示范围。

第5题 (1分)

两个n位的补码数相加,Cn和Cn-1分别是最高位和次高位产生的进位,溢出产生的逻辑表达式为

A. OF=Cn

B. OF=Cn+Cn-1

C. OF=Cn⊕Cn-1

D. OF=Cn-Cn-1

官方答案:C

[知识背景]

在补码加法运算中,溢出是指运算结果超出了补码所能表示的范围。对于n位补码,溢出发生在以下两种情况:

  • 正溢出:两个正数相加,结果为负数。例如 0111 + 0001 = 1000,即 7 + 1 = -8(本应为8,但超出了4位补码的表示范围)。
  • 负溢出:两个负数相加,结果为正数。例如 1000 + 1111 = 0111(带进位),即 -8 + (-1) = 7(本应为-9,但超出了表示范围)。

判断溢出的方法之一是利用最高位(符号位)的进位Cn和次高位(数值最高位)的进位Cn-1。当这两个进位不同时,就发生了溢出。

逻辑分析:

  • 正溢出时:两个正数的符号位都是0,相加符号位不会产生进位(Cn=0),但数值部分相加产生进位进入符号位(Cn-1=1),导致符号位变为1(结果变成负数)。此时 Cn=0, Cn-1=1,两者不同。
  • 负溢出时:两个负数的符号位都是1,相加符号位产生进位(Cn=1),但数值部分没有进位进入符号位(Cn-1=0),符号位为 1+1+0=10,结果符号位为0(变成正数)。此时 Cn=1, Cn-1=0,两者不同。
  • 没有溢出时:Cn和Cn-1相同(都为0或都为1)。

因此溢出的判断条件就是Cn和Cn-1不同,用逻辑运算表示就是异或(XOR):OF = Cn ⊕ Cn-1

[逐项分析]

A. OF=Cn -- 错误。仅看最高位进位不能判断溢出。例如两个负数相加 1001+1110=10111,Cn=1,但结果 0111 确实溢出了;而 1111+1111=11110,Cn=1,结果 1110 = -2,这是 -1+(-1)=-2,并未溢出。所以仅凭Cn无法判断。

B. OF=Cn+Cn-1 -- 错误。这里的"+"如果理解为逻辑或运算,则只要Cn或Cn-1中有一个为1,OF就为1。这会将很多正常运算(没有溢出的情况)误判为溢出。

C. OF=Cn⊕Cn-1 -- 正确。异或运算的特点是"相同为0,不同为1"。当Cn和Cn-1不同时,OF=1(发生溢出);当两者相同时,OF=0(没有溢出)。这完美地描述了溢出的判断条件。

D. OF=Cn-Cn-1 -- 错误。减法不是标准的逻辑运算,而且当Cn=0, Cn-1=1时结果为-1,这在单比特逻辑运算中没有意义。

[记忆要点]

溢出判断口诀:"最高次高不一致,异或为1即溢出"。异或运算(XOR,符号 ⊕)的核心含义就是"不同则为真",而溢出恰好发生在两个进位不同的时候。记住三个字:异或判溢出。

[教材出处]

第2章 -- 数据的表示和运算。本章介绍了补码加减法运算以及溢出的判断方法,包括单符号位判溢出法和双符号位(变形补码)判溢出法。

第6题 (1分)

指令中提供了寄存器号和一个常数,若操作数地址等于寄存器内容与常数之和,则该操作数的寻址方式为

A. 直接寻址

B. 寄存器寻址

C. 偏移寻址

D. 间接寻址

官方答案:C

[知识背景]

寻址方式是指令系统中确定操作数地址的方法。常见的寻址方式有:

  • 立即寻址:操作数直接包含在指令中。
  • 直接寻址:指令中直接给出操作数在内存中的地址。
  • 寄存器寻址:操作数在寄存器中,指令给出寄存器号。
  • 间接寻址:指令中给出的地址是操作数地址的地址(即需要两次访存才能取到操作数)。
  • 偏移寻址:操作数的有效地址 = 某个寄存器的内容 + 指令中给出的一个偏移常数(位移量)。偏移寻址包含几个变体:
    • 基址寻址:寄存器为基址寄存器,常数为偏移量。
    • 变址寻址:寄存器为变址寄存器,常数为基准地址。
    • 相对寻址:寄存器为程序计数器PC,常数为相对偏移量。

这三种变体的共同特征都是:有效地址 = 寄存器内容 + 常数,因此它们统称为"偏移寻址"。

[逐项分析]

A. 直接寻址 -- 错误。直接寻址是指令中直接给出操作数的内存地址,不涉及寄存器。而题目明确说"指令中提供了寄存器号和一个常数",这不是直接寻址。

B. 寄存器寻址 -- 错误。寄存器寻址是指操作数就在寄存器中,指令只需给出寄存器号即可。而题目说操作数地址等于"寄存器内容与常数之和",说明操作数在内存中,需要计算地址,不是简单的寄存器寻址。

C. 偏移寻址 -- 正确。偏移寻址的定义就是:有效地址 = 寄存器内容 + 偏移常数。题目所描述的情况完全符合偏移寻址的特征——指令提供寄存器号和常数,两者相加得到操作数的有效地址。

D. 间接寻址 -- 错误。间接寻址是指指令给出的地址中存放的不是操作数本身,而是操作数的地址。题目描述的是地址的计算方式(寄存器+常数),不涉及"地址的地址"这一概念。

[记忆要点]

偏移寻址的核心公式:有效地址 EA = (寄存器) + 常数。只要看到"寄存器内容加上一个常数得到地址",就是偏移寻址。偏移寻址是基址寻址、变址寻址、相对寻址的统称,它们的共同点都是"寄存器+常数"。

[教材出处]

第3章 -- 指令系统。本章详细介绍了各种寻址方式,包括立即寻址、直接寻址、寄存器寻址、间接寻址、偏移寻址(基址、变址、相对)等。

第7题 (1分)

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

A. 指令寻址方式丰富,大多数指令都能访问存储器

B. 只有少数几条指令能访问存储器

C. 指令系统中指令条数多

D. 指令系统中指令长度可长可短

官方答案:B

[知识背景]

计算机指令系统的设计理念分为两大流派:

  • CISC(Complex Instruction Set Computer,复杂指令集计算机):指令数量多、功能复杂、格式多样、长度不固定。大多数指令都可以直接访问内存。典型代表:x86架构。
  • RISC(Reduced Instruction Set Computer,精简指令集计算机):指令数量少、功能简单、格式固定、长度统一。只有专门的Load(取数)和Store(存数)指令才能访问内存,其他指令只在寄存器之间操作。典型代表:ARM、MIPS架构。

RISC的核心设计思想是:把复杂操作分解为多条简单指令来完成,每条指令在一个时钟周期内完成,便于采用流水线技术提高执行效率。为了减少访问内存的次数(因为内存访问很慢),RISC设计了大量的通用寄存器,运算操作都在寄存器之间进行,只有Load/Store指令才访问内存。这就是RISC的"Load/Store结构"。

[逐项分析]

A. 指令寻址方式丰富,大多数指令都能访问存储器 -- 错误。这是CISC的特征。CISC为了减少程序的指令条数,设计了丰富的寻址方式,让大多数指令都能直接操作内存中的数据。RISC恰恰相反,寻址方式简单,只有少数指令能访问存储器。

B. 只有少数几条指令能访问存储器 -- 正确。这是RISC最核心的特征之一。RISC采用Load/Store结构,只有Load(从内存读数据到寄存器)和Store(从寄存器写数据到内存)这两类指令可以访问存储器,其他所有运算指令都只能操作寄存器中的数据。

C. 指令系统中指令条数多 -- 错误。RISC的"R"就是Reduced(精简)的意思,指令条数少是RISC的基本特征。指令条数多是CISC的特征。

D. 指令系统中指令长度可长可短 -- 错误。指令长度不固定(变长指令)是CISC的特征。RISC采用固定长度的指令格式,所有指令长度统一,这样便于指令的取指和译码,有利于实现流水线。

[记忆要点]

RISC四大特征记忆口诀:"少、简、定、存"。指令数量少(Reduced);指令功能简单;指令长度固定;只有Load/Store指令能访问存储器。CISC则与之相反:"多、杂、变、广"——指令多、功能杂、长度可变、大多数指令都能访存。

[教材出处]

第3章 -- 指令系统。本章末尾对比介绍了CISC和RISC两种指令集设计思想的区别,包括指令条数、指令格式、寻址方式、访存方式等方面的差异。

第8题 (1分)

在采用微程序控制器的计算机中微程序存放在

A. 堆栈中

B. 主存中

C. CPU中

D. 磁盘中

官方答案:C

[知识背景]

微程序控制器是CPU控制器的一种实现方式。在这种方案中,每条机器指令的执行过程被分解为一系列微操作,这些微操作被编码成微指令,若干条微指令组成一段微程序。

微程序存放在CPU内部的一个专用只读存储器中,这个存储器叫做"控制存储器"(Control Memory,简称CM或CS)。控制存储器是CPU的一个组成部分,位于CPU芯片内部。

工作流程:当CPU取到一条机器指令后,根据指令的操作码去控制存储器中找到对应的微程序入口地址,然后依次执行微程序中的每条微指令,每条微指令产生一组控制信号来驱动数据通路完成相应的微操作。

控制存储器通常采用ROM(只读存储器)实现,因为微程序在计算机出厂时就已经固化好了,运行过程中不需要修改。

[逐项分析]

A. 堆栈中 -- 错误。堆栈是主存中用于保存函数调用信息(如返回地址、局部变量等)的一块区域,用于程序运行时的数据存储,不是存放微程序的地方。

B. 主存中 -- 错误。主存(内存)存放的是用户程序和数据,以及操作系统代码。微程序不是用户程序,它是CPU内部用于解释执行机器指令的控制程序,存放在CPU内部的控制存储器中,不在主存中。

C. CPU中 -- 正确。微程序存放在CPU内部的控制存储器(CM)中。控制存储器是CPU的一个组成部件,使用ROM实现,在制造时就将微程序固化其中。

D. 磁盘中 -- 错误。磁盘是外部存储设备,访问速度很慢。微程序需要在每条机器指令执行时快速读取,不可能存放在速度如此慢的磁盘中。

[记忆要点]

记住:微程序存放在CPU内部的控制存储器(CM)中。可以这样理解——微程序是CPU用来"翻译"机器指令的"词典",这个词典必须放在CPU身边(内部),才能快速查阅。控制存储器用ROM实现,内容固定不可修改。注意区分:控制存储器(CM)在CPU内部存放微程序;主存储器(MM)在CPU外部存放用户程序和数据。

[教材出处]

第4章 -- 中央处理器。本章介绍了控制器的两种实现方式:硬布线控制器和微程序控制器,详细讲解了微程序、微指令、控制存储器等概念。

第9题 (1分)

高速缓存一般采用

A. 动态存储器

B. 静态存储器

C. 只读存储器

D. 非易失存储器

官方答案:B

[知识背景]

高速缓存(Cache)是位于CPU和主存之间的一级高速小容量存储器,用于缓解CPU和主存之间速度差距过大的矛盾。CPU访问Cache的速度远快于访问主存。

存储器按照存储元件的工作原理可以分为:

  • 静态存储器(SRAM,Static RAM):使用触发器(6个晶体管)存储一位数据,只要不断电,数据就能保持,无需刷新。速度快,但成本高、集成度低、功耗大。
  • 动态存储器(DRAM,Dynamic RAM):使用电容(1个晶体管+1个电容)存储一位数据,电容会漏电,必须定期刷新才能保持数据。速度较慢,但成本低、集成度高。
  • 只读存储器(ROM):只能读不能写(或写入速度极慢),数据在制造时或编程时写入,断电后不丢失。用于存储固件、BIOS等。
  • 非易失存储器:断电后数据不丢失的存储器,如Flash、ROM等。速度一般不如SRAM和DRAM。

Cache需要的核心特性是:速度极快。因此必须采用速度最快的SRAM。虽然SRAM成本高,但Cache容量很小(通常只有几KB到几MB),所以总成本可以接受。

[逐项分析]

A. 动态存储器 -- 错误。DRAM速度较慢,而且需要定期刷新(每隔几毫秒就要对所有存储单元重新充电),刷新期间不能正常读写。DRAM通常用于构建主存(内存条),不适合用于对速度要求极高的Cache。

B. 静态存储器 -- 正确。SRAM速度最快(存取时间可达几纳秒),不需要刷新,非常适合构建Cache。Cache的容量小,所以SRAM成本高的缺点影响不大。现代CPU的L1/L2/L3 Cache都是用SRAM实现的。

C. 只读存储器 -- 错误。ROM只能读不能写,而Cache需要频繁地读写数据(从主存加载数据到Cache,以及将修改后的数据写回主存),所以ROM不适合做Cache。

D. 非易失存储器 -- 错误。非易失存储器(如Flash)的读写速度远不如SRAM,而且写入次数有限制。Cache不需要断电保持数据的特性(断电后Cache数据丢失是可以接受的),因此没有必要使用非易失存储器。

[记忆要点]

存储器层次结构中的对应关系:"Cache用SRAM,主存用DRAM"。理由很简单:Cache要快,SRAM最快;主存要大,DRAM便宜容量大。记住这两个对应关系即可:Cache -- SRAM(快但贵),主存 -- DRAM(慢但便宜)。

[教材出处]

第5章 -- 存储器层次结构。本章介绍了存储器的分类(SRAM、DRAM、ROM等)以及Cache的基本概念和实现技术。

第10题 (1分)

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

A. 将CPU中的各通用寄存器的内容压入堆栈

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

C. 将CPU中的指令寄存器的内容压入堆栈

D. 将寄存器SP的内容压入堆栈

官方答案:B

[知识背景]

中断是指CPU在正常执行程序的过程中,由于某种事件(如I/O设备请求、定时器到期、程序异常等)的发生,暂停当前程序的执行,转去处理该事件,处理完毕后再返回原来被中断的程序继续执行。

中断响应过程中,CPU需要做以下关键操作:

  • 保存断点:将当前程序计数器PC的值保存起来。PC中存放的是下一条将要执行的指令的地址,这是中断处理完毕后能够正确返回原程序继续执行的关键信息。通常将PC的值压入系统堆栈中。
  • 保存现场:将CPU中各个通用寄存器、状态寄存器等的内容保存起来(通常压入堆栈),以防中断服务程序修改这些寄存器的值。保存现场通常由中断服务程序的开头部分完成。

"断点"和"现场"是两个不同的概念。"断点"特指程序计数器PC的值(即被中断的位置),而"现场"指的是CPU各寄存器的状态。保存断点是中断响应过程中由硬件自动完成的,而保存现场通常由软件(中断服务程序)完成。

[逐项分析]

A. 将CPU中的各通用寄存器的内容压入堆栈 -- 错误。这描述的是"保存现场",而不是"保存断点"。保存现场是将通用寄存器等的内容保存起来,以便中断处理完毕后恢复CPU的工作状态。保存断点只涉及PC一个寄存器。

B. 将程序计数器PC的内容压入堆栈 -- 正确。"断点"就是指程序被中断的位置,即当前PC的值。保存断点就是将PC的内容压入堆栈,这样中断服务程序执行完毕后,可以从堆栈中弹出PC值,返回到原来被中断的位置继续执行。

C. 将CPU中的指令寄存器的内容压入堆栈 -- 错误。指令寄存器(IR)中存放的是当前正在执行的指令本身(指令的机器码),不是指令的地址。保存IR没有意义,因为指令本身存放在内存中不会丢失,我们需要保存的是指令的地址(即PC的值),以便知道从哪里继续执行。

D. 将寄存器SP的内容压入堆栈 -- 错误。SP是堆栈指针寄存器,它指向堆栈的栈顶。保存SP本身没有意义,而且在使用堆栈保存数据时SP会自动调整,不需要单独保存。保存断点是保存PC,不是保存SP。

[记忆要点]

区分"保存断点"和"保存现场":断点 = PC(程序在哪里被打断的),现场 = 各寄存器状态(程序被打断时CPU的工作状态)。断点只有一个值(PC),现场有多个值(各通用寄存器)。保存断点由硬件自动完成,保存现场由中断服务程序用软件完成。

[教材出处]

第6章 -- 互连及输入输出组织。本章介绍了中断系统的工作原理,包括中断请求、中断响应、中断处理和中断返回的完整过程,重点讲解了保存断点和保存现场的区别。

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

在电子数字计算机的发展过程中,各个时代都有其代表性的电子器件,第一代是电子管,第二代是______,从第三代开始主要器件是______。

官方答案:晶体管,集成电路

[知识背景]

电子数字计算机的发展历程通常按照所采用的核心电子器件来划分为不同的"代"。每一代的更替,都意味着计算机在体积、速度、功耗、可靠性和成本等方面发生了质的飞跃。理解这个发展脉络是学习计算机组成原理的起点。

计算机的四代划分如下:

  • 第一代(约1946-1958年):核心器件为电子管(真空管)。代表机型是ENIAC。电子管体积大、耗电多、发热严重、寿命短,因此第一代计算机体积庞大(占满整个房间)、故障率高。
  • 第二代(约1958-1964年):核心器件为晶体管。晶体管是一种固态半导体器件,比电子管体积小得多、耗电少、寿命长、可靠性高。晶体管的发明使计算机的体积和功耗大幅降低。
  • 第三代(约1964-1971年):核心器件为中小规模集成电路(SSI/MSI)。集成电路将多个晶体管及其连线集成在一块硅片上,大大提高了集成度和可靠性。
  • 第四代(约1971年至今):核心器件为大规模和超大规模集成电路(LSI/VLSI)。一块芯片上可以集成数十亿个晶体管,微处理器的出现标志着第四代的开始。
[详细解析]

本题考查的是计算机发展史中各代的标志性电子器件。

题目已经给出"第一代是电子管",要求填写第二代和第三代开始的主要器件。

第二代是晶体管:1947年贝尔实验室发明了晶体管,它是一种利用半导体材料制成的固态电子器件,能够实现信号的放大和开关功能。与电子管相比,晶体管的优势在于:体积仅为电子管的几十分之一,功耗大大降低,工作更加可靠,寿命更长。因此晶体管取代电子管成为第二代计算机的核心器件。

从第三代开始主要器件是集成电路:1958年杰克·基尔比发明了集成电路,将晶体管、电阻、电容等元器件及其连线全部制作在同一块半导体基片上。从第三代计算机开始,核心器件就是集成电路,只是集成度不同——第三代为中小规模集成电路,第四代为大规模/超大规模集成电路。因此题目说"从第三代开始",强调的是集成电路这一大类器件。

[记忆要点]

四代计算机的核心器件,按照时间顺序排列:电子管 -> 晶体管 -> 集成电路(中小规模) -> 集成电路(大规模/超大规模)

简记口诀:"管、体管、集成路"——电子管、晶体管、集成电路,每一代都是前一代的微型化和集成化的结果。

注意第三代和第四代的主要器件都是"集成电路",区别在于集成度不同。所以题目说"从第三代开始主要器件是集成电路"是完全正确的。

[教材出处]

第1章 计算机系统概述 -- 计算机的发展历程

第12题 (2分)

主机对外设端口的编址方式分为______和______。

官方答案:外设单独编址,外设统一编址

[知识背景]

在计算机系统中,CPU要与外部设备(如键盘、显示器、磁盘等)进行数据交换,就需要通过"I/O端口"(也称接口寄存器)来实现。每个I/O端口都需要有一个地址,CPU才能找到它并与之通信。

问题的关键在于:这些I/O端口的地址如何分配?是和主存储器共用一套地址空间,还是单独使用另一套地址空间?这就是"编址方式"要解决的问题。

主机对外设端口有两种编址方式:

  • 外设单独编址(也称"I/O独立编址"或"端口映射I/O"):I/O端口的地址空间与主存的地址空间是相互独立的两个地址空间。需要使用专门的I/O指令(如IN、OUT指令)来访问外设端口。Intel x86处理器采用的就是这种方式。
  • 外设统一编址(也称"存储器映射I/O"或"内存映射I/O"):I/O端口的地址与主存的地址统一编排在同一个地址空间中。CPU可以像访问内存一样,使用普通的访存指令(如LOAD、STORE)来访问外设端口,不需要专门的I/O指令。MIPS、ARM等处理器采用这种方式。
[详细解析]

本题考查I/O端口的编址方式。

外设单独编址的特点:

  • I/O端口地址与内存地址分开,形成两个独立的地址空间。
  • 需要专门的I/O指令来访问端口(如x86的IN和OUT指令)。
  • 需要额外的控制信号来区分当前访问的是内存还是I/O端口。
  • 优点:不占用内存地址空间;I/O指令短小,执行速度快。
  • 缺点:I/O指令功能有限,编程灵活性较差。

外设统一编址的特点:

  • I/O端口地址和内存地址统一编排在同一地址空间中。
  • 用普通的访存指令(如LOAD/STORE)即可访问I/O端口,无需专门的I/O指令。
  • CPU通过地址的范围来判断访问的是内存还是I/O设备。
  • 优点:不需要专用I/O指令,编程统一灵活,可以使用丰富的访存指令对I/O端口进行操作。
  • 缺点:占用了一部分内存地址空间,使可用的内存地址减少。
[记忆要点]

两种编址方式的核心区别:"单独"是地址空间分开,"统一"是地址空间合并

联想记忆:想象一栋大楼——"单独编址"就像楼里的办公室和商店有两套不同的门牌号系统,找商店要用商店专用的号码;"统一编址"就像所有房间不管办公还是商铺,都用同一套门牌号,按号码找就行。

代表处理器:x86用单独编址(有IN/OUT指令),MIPS用统一编址(无专用I/O指令)。

[教材出处]

第6章 互连及输入输出组织 -- I/O端口及其编址方式

第13题 (2分)

主存与Cache的地址映射方式有______、全相联映射和______三种方式。

官方答案:直接映射,组相联映射

[知识背景]

Cache(高速缓冲存储器)是位于CPU和主存之间的一级高速小容量存储器,用来存放CPU近期最常使用的数据和指令,以弥补CPU与主存之间的速度差距。

由于Cache的容量远小于主存,主存中的数据只能部分地存放在Cache中。这就产生了一个核心问题:主存的某个数据块应该放到Cache的哪个位置?这就是"地址映射"问题。

地址映射方式有三种:

  • 直接映射(Direct Mapping):主存中的每个块只能映射到Cache中一个固定的位置。映射规则是:Cache块号 = 主存块号 mod Cache块数。这种方式最简单,硬件实现容易,但冲突率高。
  • 全相联映射(Fully Associative Mapping):主存中的任何一个块都可以放到Cache中的任意位置。这种方式最灵活,Cache利用率最高,冲突最少,但硬件实现最复杂(需要同时比较所有Cache行的标记)。
  • 组相联映射(Set Associative Mapping):将Cache分成若干组,主存的某个块只能映射到Cache的某个固定组中,但在该组内可以放到任意位置。组号 = 主存块号 mod 组数。这种方式是直接映射和全相联映射的折中方案。
[详细解析]

本题考查Cache的三种地址映射方式。题目已经给出"全相联映射",要求填写另外两种。

直接映射:可以看作"一对一"的映射关系。每个主存块只有唯一一个可以存放的Cache位置。好比学校宿舍分配,每个学生只能住指定的某一间宿舍。优点是查找速度快(只需检查一个位置),缺点是如果多个常用的主存块映射到同一个Cache行,就会频繁替换,产生"抖动"现象。

组相联映射:可以看作"组间直接映射、组内全相联映射"。先按直接映射的规则确定属于哪个组,然后在组内可以自由放置。例如"2路组相联"表示每组有2个Cache行。好比宿舍分配中,每个学生被分到某一间宿舍,但这间宿舍有多个床位可以任选。这种方式兼顾了查找速度和冲突率,是现代处理器中最常用的映射方式。

三种方式的关系:直接映射是"1路组相联"的特例,全相联映射是"Cache块数路组相联"的特例。因此组相联映射是最一般的形式。

[记忆要点]

三种映射方式的记忆口诀:"直、全、组"——直接映射、全相联映射、组相联映射。

从灵活性角度排列:直接映射(最不灵活)< 组相联映射(折中)< 全相联映射(最灵活)。

从硬件复杂度角度排列:直接映射(最简单)< 组相联映射(折中)< 全相联映射(最复杂)。

核心规律:灵活性越高 -> 冲突越少 -> Cache利用率越高 -> 但硬件越复杂。

[教材出处]

第5章 存储器层次结构 -- Cache的地址映射方式

第14题 (2分)

常见的输入/输出传输控制方式有直接程序传输方式、______和______。

官方答案:中断传输方式、DMA传输方式

[知识背景]

输入/输出(I/O)传输控制方式,是指CPU与外部设备之间进行数据传输时,由谁来控制传输过程、CPU在传输期间是否可以做其他工作等问题的解决方案。

I/O传输控制方式的发展,核心目标是让CPU尽可能少地参与I/O操作,从而提高CPU的利用率和整个系统的效率。

常见的三种I/O传输控制方式:

  • 直接程序传输方式(也称"程序查询方式"或"轮询方式"):CPU执行程序主动查询外设的状态,如果外设准备好了就进行数据传输,否则CPU一直等待(忙等)。这是最简单但效率最低的方式,因为CPU在等待外设期间完全不能做其他工作。
  • 中断传输方式:外设准备好数据后,主动向CPU发出中断请求信号。CPU在当前指令执行完毕后响应中断,暂停当前程序转去执行中断服务程序完成数据传输,传输完毕后返回继续执行原程序。CPU不需要忙等,效率大大提高。
  • DMA传输方式(Direct Memory Access,直接存储器访问):由专门的DMA控制器直接控制外设与主存之间的数据传输,不需要CPU逐字节参与。CPU只在传输开始和结束时介入,传输过程中CPU可以继续执行其他程序。适合高速、大批量的数据传输(如磁盘读写)。
[详细解析]

本题考查I/O传输的三种基本控制方式。题目已给出"直接程序传输方式",要求填写另外两种。

中断传输方式是对直接程序传输方式的改进。核心思想是"不再忙等,而是等通知"。就像去餐厅吃饭:直接程序传输方式相当于你一直盯着厨房看菜做好了没有;中断方式相当于你拿了一个叫号器,菜做好了服务员会叫你,你在等待期间可以做别的事。中断方式的数据传输仍然需要CPU执行程序来完成,每次传输的基本单位是一个字(或字节)。

DMA传输方式是对中断方式的进一步改进。核心思想是"连传输过程都不要CPU操心"。DMA控制器接管了总线控制权,直接在外设和主存之间传输数据。就像有一个专门的搬运工帮你搬东西,你只需要告诉他从哪搬到哪、搬多少,然后就可以去做别的事了。DMA方式的传输速度远高于中断方式,因为不需要CPU逐字参与。

三种方式的CPU参与程度递减:直接程序传输(CPU全程参与)> 中断传输(CPU在中断时参与)> DMA传输(CPU基本不参与传输过程)。

[记忆要点]

三种I/O传输控制方式按发展顺序:直接程序传输 -> 中断传输 -> DMA传输

记忆口诀:"程(程序查询)中(中断)DMA"。

核心演进规律:CPU的参与程度越来越少,系统效率越来越高。还有更高级的方式如通道方式和I/O处理机方式,但本题考查的是最基本的三种。

[教材出处]

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

第15题 (2分)

MIPS指令系统中指令的格式分为______型、______型和J型三种类型。

官方答案:R,I

[知识背景]

MIPS(Microprocessor without Interlocked Pipeline Stages)是一种经典的精简指令集计算机(RISC)架构。MIPS指令系统的一个重要特点是所有指令都是固定的32位长度,但根据操作类型和操作数的不同,分为三种指令格式。

MIPS的三种指令格式:

  • R型指令(Register型,寄存器型):主要用于寄存器之间的算术逻辑运算。格式为6个字段:op(6位) | rs(5位) | rt(5位) | rd(5位) | shamt(5位) | funct(6位)。其中op为操作码(R型统一为000000),rs和rt是源操作数寄存器,rd是目的寄存器,shamt是移位量,funct是功能码(区分具体操作)。典型指令:add, sub, and, or, slt等。
  • I型指令(Immediate型,立即数型):涉及立即数操作或访存操作。格式为4个字段:op(6位) | rs(5位) | rt(5位) | immediate(16位)。16位立即数字段可以是立即数值,也可以是访存地址偏移量。典型指令:addi, lw, sw, beq等。
  • J型指令(Jump型,跳转型):用于无条件跳转。格式为2个字段:op(6位) | address(26位)。26位地址字段提供跳转的目标地址。典型指令:j, jal。
[详细解析]

本题考查MIPS指令格式的分类。题目已给出J型,要求填写R型和I型。

R型指令中的"R"代表Register(寄存器)。R型指令的操作数全部来自寄存器,运算结果也写回寄存器。R型指令的op字段全为0,具体操作由funct字段决定。R型指令有6个字段共32位,是三种格式中字段最多的。

I型指令中的"I"代表Immediate(立即数)。I型指令包含一个16位的立即数字段,这个字段既可以表示运算的立即数操作数(如addi指令),也可以表示访存的地址偏移量(如lw/sw指令),还可以表示分支指令的偏移地址(如beq/bne指令)。I型指令有4个字段共32位。

J型指令中的"J"代表Jump(跳转)。J型指令只有两个字段,因为无条件跳转需要尽可能大的地址范围,所以除了6位op之外,剩下26位全部用作目标地址。

三种格式的设计思路:需要更多寄存器编号就用R型,需要立即数就用I型,需要长地址就用J型。所有格式都是32位,体现了RISC的固定长度指令设计原则。

[记忆要点]

MIPS三种指令格式:R(Register寄存器)、I(Immediate立即数)、J(Jump跳转)

记忆技巧:"RIJ"三个字母,按字母表顺序就是R、I、J(跳过了中间一些字母)。

字段数量递减:R型6个字段 > I型4个字段 > J型2个字段。原因是后面的格式需要更长的立即数/地址字段,所以合并了一些寄存器字段。

所有三种格式的前6位都是op操作码字段,这是它们的共同点。

[教材出处]

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

第16题 (2分)

IEEE754单精度浮点数用二进制表示时,阶码的长度为______位,尾数的长度为______位。

官方答案:8,23

[知识背景]

IEEE 754是国际电气和电子工程师协会(IEEE)制定的浮点数运算标准,几乎所有现代计算机和编程语言都遵循这一标准。

浮点数的一般表示形式为:(-1)S x 1.M x 2E-偏移量,其中S是符号位,M是尾数(小数部分),E是阶码(指数部分)。

IEEE 754定义了两种常用的浮点数格式:

  • 单精度浮点数(float):总长度32位 = 1位符号位(S) + 8位阶码(E) + 23位尾数(M)。阶码的偏移量为127。
  • 双精度浮点数(double):总长度64位 = 1位符号位(S) + 11位阶码(E) + 52位尾数(M)。阶码的偏移量为1023。

IEEE 754采用"隐含的1"技术:规格化的浮点数的尾数总是以1开头(即1.xxxxx的形式),所以这个"1"不需要存储,可以节省1位空间。因此23位尾数实际上表示了24位的精度。

[详细解析]

本题考查IEEE 754单精度浮点数的格式。

IEEE 754单精度浮点数的32位分配如下:

| 第31位 | 第30-23位 | 第22-0位 |

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

阶码长度为8位:8位阶码采用移码表示(偏移量为127),可表示的阶码范围为0~255。其中0和255有特殊含义(表示非规格化数、零、无穷大、NaN等),因此规格化浮点数的阶码实际取值范围为1~254,对应的真值范围为-126~+127。

尾数长度为23位:23位尾数存储的是小数点后面的部分。由于隐含了一个"1"(即尾数的真实值为1.M),所以23位存储实际提供了24位的有效精度,大约相当于十进制的7位有效数字。

举例:十进制数-6.5的IEEE 754单精度表示:

  • -6.5 = -110.1(二进制)= -1.101 x 22
  • 符号位S = 1(负数)
  • 阶码E = 2 + 127 = 129 = 10000001(二进制)
  • 尾数M = 10100000000000000000000(去掉隐含的1后,存储小数部分101,补零至23位)
  • 完整表示:1 10000001 10100000000000000000000
[记忆要点]

IEEE 754的两种格式必须牢记:

单精度(32位):1 + 8 + 23 = 32,偏移量127。

双精度(64位):1 + 11 + 52 = 64,偏移量1023。

记忆口诀:"单8尾23,双11尾52"。

简单推导:单精度32位减去1位符号位剩31位,阶码8位是经过工程权衡的选择(既要有足够的表示范围,又要尽可能多的尾数精度),剩余31-8=23位给尾数。

[教材出处]

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

第17题 (2分)

Intel将外部中断分为______中断和______中断。

官方答案:可屏蔽,非屏蔽

[知识背景]

中断是计算机系统中一种重要的机制,它允许外部事件打断CPU当前正在执行的程序,转去处理紧急事务。中断按照来源可以分为内部中断(由CPU内部产生,如除法溢出、非法指令等)和外部中断(由CPU外部的设备产生,如键盘输入、定时器到期等)。

在Intel处理器体系中,外部中断又进一步细分为两类:

  • 可屏蔽中断(Maskable Interrupt):通过CPU的INTR(Interrupt Request)引脚输入。这类中断可以被CPU通过软件手段(设置中断标志位IF=0)暂时屏蔽(禁止响应)。当CPU正在执行关键的、不能被打断的操作时,可以屏蔽这些中断。大多数外设产生的中断都属于可屏蔽中断,如键盘输入、磁盘传输完成、网卡数据到达等。
  • 非屏蔽中断(Non-Maskable Interrupt,NMI):通过CPU的NMI引脚输入。这类中断不能被软件屏蔽,CPU必须无条件响应。非屏蔽中断通常对应非常紧急的事件,如电源掉电、内存奇偶校验错误、硬件故障等,这些事件如果不立即处理可能导致数据丢失或系统损坏。
[详细解析]

本题考查Intel处理器对外部中断的分类。

可屏蔽中断的关键特征:

  • 通过INTR引脚接收中断请求信号。
  • CPU中的标志寄存器中有一个中断允许标志位IF(Interrupt Flag)。当IF=1时,CPU允许响应可屏蔽中断;当IF=0时,CPU禁止响应可屏蔽中断。
  • 可以通过CLI指令关中断(IF=0)、STI指令开中断(IF=1)来控制。
  • CPU在每条指令执行结束时检查INTR引脚,如果有请求且IF=1,则响应中断。
  • 实际系统中通常使用8259A中断控制器(或APIC)来管理多个可屏蔽中断源的优先级。

非屏蔽中断的关键特征:

  • 通过NMI引脚接收中断请求信号。
  • 不受IF标志位的控制,即使IF=0,CPU也必须响应。
  • 优先级高于可屏蔽中断。
  • Intel中NMI的中断类型号固定为2。
  • 通常用于处理严重的硬件故障或系统级紧急事件。
[记忆要点]

外部中断的两种类型:可屏蔽中断和非屏蔽中断。区分的标准就是"能不能被软件屏蔽"。

联想记忆:把中断想象成别人找你说话——"可屏蔽中断"就像普通同事找你聊天,你忙的时候可以说"等一下"(屏蔽);"非屏蔽中断"就像消防警报,不管你在做什么都必须立刻响应。

对应引脚:可屏蔽中断 -> INTR引脚,非屏蔽中断 -> NMI引脚。

[教材出处]

第6章 互连及输入输出组织 -- 中断系统与中断分类

第18题 (1分)

磁盘存储器的平均存取时间主要包括寻道时间、______时间和数据传输时间三个部分。

官方答案:旋转等待

[知识背景]

磁盘存储器(硬盘)是一种机械式的外部存储设备,其内部由一个或多个高速旋转的磁性盘片和在盘片表面移动的读写磁头组成。由于涉及机械运动,磁盘的数据访问速度远慢于半导体存储器(如内存、Cache)。

要理解磁盘的存取时间,需要先了解磁盘的物理结构:

  • 磁道(Track):盘片表面上的同心圆环,数据记录在磁道上。
  • 扇区(Sector):每条磁道被划分为若干段弧,每段弧称为一个扇区,是磁盘读写的最小单位。
  • 磁头(Head):负责在磁道上读取或写入数据。
  • 磁臂(Arm):承载磁头,可以在盘片径向方向移动,使磁头定位到不同磁道。

磁盘读取数据的过程需要三个步骤:

  1. 磁臂带着磁头移动到目标磁道上方(寻道)。
  2. 等待目标扇区旋转到磁头下方(旋转等待)。
  3. 磁头读取扇区中的数据(数据传输)。
[详细解析]

本题考查磁盘存储器平均存取时间的三个组成部分。题目已给出"寻道时间"和"数据传输时间",要求填写第三个部分。

磁盘的平均存取时间 = 寻道时间 + 旋转等待时间 + 数据传输时间

寻道时间(Seek Time):磁头从当前磁道移动到目标磁道所需的时间。这取决于磁头需要跨越的磁道数量。寻道时间是三个部分中耗时最长的,通常在几毫秒到十几毫秒之间。

旋转等待时间(Rotational Latency,也称旋转延迟):磁头到达目标磁道后,等待目标扇区旋转到磁头正下方所需的时间。平均旋转等待时间等于磁盘旋转半周的时间。例如,一个7200转/分钟(RPM)的硬盘,每转一圈需要 60/7200 = 8.33毫秒,因此平均旋转等待时间约为 8.33/2 = 4.17毫秒。

数据传输时间(Transfer Time):磁头读取(或写入)目标扇区数据所需的时间。这取决于要传输的数据量和磁盘的数据传输速率。通常这部分时间最短。

在实际系统中,寻道时间和旋转等待时间占了平均存取时间的绝大部分,这也是为什么固态硬盘(SSD,无机械运动部件)比机械硬盘快得多的根本原因。

[记忆要点]

磁盘平均存取时间的三个部分:寻道时间 + 旋转等待时间 + 数据传输时间

联想记忆:想象去图书馆借书的过程——

  • "寻道时间"就像你走到正确的书架前(找到正确的磁道)。
  • "旋转等待时间"就像你在书架前上下扫视寻找目标书籍的位置(等待目标扇区转到磁头下方)。
  • "数据传输时间"就像你从书架上取出书(读取数据)。

时间大小关系:通常寻道时间 > 旋转等待时间 > 数据传输时间。

注意"旋转等待"也可能写作"旋转延迟"或"等待时间",不同教材用词可能略有不同,但概念相同。

[教材出处]

第5章 存储器层次结构 -- 磁盘存储器

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

名词解释:(计算机的)字长

官方答案:指计算机一次操作处理的基本二进制位数。如16位,32位,64位。

[知识背景]

计算机内部所有的信息(数字、文字、指令等)都是用二进制(0和1)来表示的。每一个0或1称为一个"位"(bit)。计算机在工作时,并不是一位一位地处理数据,而是一次同时处理一组二进制位。这一组二进制位就构成了一个"字"(Word),而这一组中包含多少个二进制位,就是"字长"(Word Length)。

字长是计算机最核心的性能指标之一。我们平时说的"32位计算机"或"64位计算机",指的就是这台计算机的字长分别是32位和64位。字长越长,计算机一次能处理的数据量就越大,运算精度也越高,性能通常也越强。

打个比方:如果把计算机比作一条公路,字长就相当于公路的车道数。8位字长相当于8车道,一次能通过8辆车;64位字长相当于64车道,一次能通过64辆车,运输能力显然更强。

[详细解析]

1. 字长的定义

字长是指计算机在一次操作中能够同时处理(运算、传输、存储)的二进制数据的位数。它反映了计算机的基本数据处理能力。

2. 字长与各部件的关系

  • 与运算器的关系:字长决定了ALU(算术逻辑单元)一次能进行多少位的运算。32位字长的计算机,其ALU一次最多进行32位的加减乘除运算。
  • 与寄存器的关系:通用寄存器的位数通常等于字长。64位计算机的通用寄存器通常是64位的。
  • 与数据总线的关系:数据总线的宽度通常与字长一致或为字长的整数倍,以保证一次传输一个字的数据。
  • 与存储器的关系:字长影响存储单元的大小和数据存取的效率。

3. 字长的发展历程

  • 早期微型计算机:4位、8位(如Intel 8080)
  • 个人计算机时代:16位(如Intel 8086)、32位(如Intel 80386、Pentium系列)
  • 现代计算机:64位(如目前主流的桌面和服务器处理器)

4. 字长对性能的影响

  • 运算精度:字长越长,能表示的数值范围越大,运算精度越高。例如32位整数最大能表示约21亿,而64位整数最大约能表示9.2乘以10的18次方。
  • 寻址能力:字长影响地址空间的大小。32位系统最多寻址4GB内存,64位系统理论上可寻址约1600万TB。
  • 处理速度:字长越长,一次处理的数据越多,在处理大量数据时效率越高。

5. 注意区分

字长不等于字节(Byte)。字节固定为8位,而字长可以是8位、16位、32位、64位等,取决于具体的计算机设计。一个字包含的字节数 = 字长 / 8。

[记忆要点]
  • 核心关键词:"一次操作"、"基本二进制位数" -- 答题时务必体现"一次"这个关键限定。
  • 记忆口诀:"字长定宽度,一次处理量" -- 字长决定了计算机一次能处理多宽的数据。
  • 答题模板:字长是指计算机一次操作(运算、存取、传送)所处理的二进制数据的位数,常见的字长有16位、32位和64位。
  • 常见陷阱:不要把字长和字节混淆;不要把字长和指令长度等同(指令长度可以不等于字长)。
[教材出处]

第1章 - 计算机系统概述。字长是计算机的基本性能指标之一,在介绍计算机硬件系统的基本组成和主要技术指标时讲解。

第20题 (3分)

名词解释:奇偶校验码

官方答案:在有效数据位中增加一位校验位,使得总编码中的"1"的个数为奇数个或偶数个。

[知识背景]

数据在计算机内部传输或存储时,可能会因为电磁干扰、硬件故障等原因发生错误,比如某一位从0变成了1,或者从1变成了0。为了检测这种错误,人们发明了各种"校验码",而奇偶校验码是其中最简单、最基础的一种。

奇偶校验码的基本思想非常简单:在原始数据的基础上额外添加一个二进制位(称为校验位),通过让所有位中"1"的总数保持为奇数或偶数,来检测数据是否发生了错误。

打个比方:假设你要寄一箱10个苹果给朋友,你担心快递途中苹果丢失。你可以在箱子里放一张纸条写"总共10个",朋友收到后数一数,如果不是10个就知道出了问题。奇偶校验码的原理与此类似,只不过它"数"的是二进制数据中1的个数。

[详细解析]

1. 基本原理

假设原始数据为 n 位,奇偶校验码在这 n 位数据的基础上增加 1 位校验位,使总编码变为 n+1 位。校验位的值(0或1)由以下规则确定:

  • 奇校验:使 n+1 位编码中"1"的总个数为奇数。
  • 偶校验:使 n+1 位编码中"1"的总个数为偶数。

2. 具体示例

假设原始数据为 1010110(7位,其中有4个1):

  • 采用奇校验:4个1是偶数,需要添加校验位"1",使总共有5个1(奇数)。编码变为 11010110。
  • 采用偶校验:4个1是偶数,需要添加校验位"0",使总共仍有4个1(偶数)。编码变为 01010110。

3. 检错过程

接收方收到数据后,数一数所有位中"1"的个数:

  • 若采用奇校验,"1"的个数应为奇数,若为偶数则说明出错。
  • 若采用偶校验,"1"的个数应为偶数,若为奇数则说明出错。

4. 能力与局限

  • 检错能力:只能检测出奇数个位发生错误的情况(最常见的是1位出错)。
  • 无法检测偶数个位出错:如果有2位同时出错,"1"的奇偶性不变,无法检测到。
  • 不能纠错:即使检测到错误,也无法判断是哪一位出了错,因此不能自动纠正错误。
  • 编码效率高:只需要增加1位,开销很小。

5. 与其他校验码的比较

  • 海明码:不仅能检错还能纠错,但需要更多的校验位。
  • CRC循环冗余校验码:检错能力更强,广泛用于网络通信和磁盘存储。
[记忆要点]
  • 核心关键词:"增加一位校验位"、"1的个数"、"奇数或偶数" -- 三个要素缺一不可。
  • 记忆口诀:"加一位,数个数,奇偶定" -- 加一个校验位,数1的个数,用奇偶性来判断。
  • 重要对比:奇偶校验码只能"检错"不能"纠错",海明码既能检错又能纠错。这是高频考点。
  • 答题提醒:答题时要明确说出"增加一位校验位"以及"奇数个或偶数个"两个核心概念。
[教材出处]

第2章 - 数据的表示和运算。奇偶校验码属于数据校验的基本方法,在讲解数据的检错与纠错编码时介绍,通常与海明码、CRC码等一起讨论。

第21题 (3分)

名词解释:寄存器间接寻址

官方答案:指令中给出的地址码是一个寄存器编号,该寄存器中存放的是操作数的有效地址。

[知识背景]

要理解"寄存器间接寻址",首先要理解几个基本概念:

寻址方式:计算机执行指令时,需要找到操作数(即要参与运算的数据)。"寻址方式"就是告诉计算机"去哪里找操作数"的方法。不同的寻址方式就像不同的"找东西"策略。

寄存器:CPU内部的高速小容量存储器,存取速度极快,但数量有限。

有效地址:操作数在主存储器中的实际存放地址。

生活中的比喻:假设你要找一个人。"直接寻址"就好比有人告诉你"这个人住在A小区301室",你直接去那个地址找。"寄存器间接寻址"就好比有人告诉你"地址写在张三的笔记本上",你先找到张三的笔记本(寄存器),打开看到里面写的地址"A小区301室",然后再去那个地址找人。多了一步"中转"。

[详细解析]

1. 寻址过程详解

寄存器间接寻址的完整过程分为两步:

  1. 第一步:根据指令中的寄存器编号,找到对应的寄存器,读出其中的内容。这个内容不是操作数本身,而是操作数在主存中的地址。
  2. 第二步:用刚才读出的地址去访问主存储器,取出真正的操作数。

用公式表示:有效地址 EA = (Ri),即有效地址等于寄存器 Ri 的内容。操作数 = M[EA] = M[(Ri)],即操作数等于主存中该地址对应单元的内容。

2. 与相关寻址方式的对比

寻址方式 指令中给出 寄存器中存放 访存次数
寄存器直接寻址 寄存器编号 操作数本身 0次
寄存器间接寻址 寄存器编号 操作数的地址 1次
直接寻址 主存地址 -- 1次
间接寻址(主存) 主存地址 -- 2次

3. 寄存器间接寻址的优点

  • 比主存间接寻址快:主存间接寻址需要访问主存2次(第一次取地址,第二次取数据),而寄存器间接寻址只需访问主存1次(取地址的操作在CPU内部的寄存器中完成,速度极快)。
  • 寻址范围大:寄存器的位数通常等于字长,可以提供很大的地址空间。而指令中的地址码字段往往位数有限,直接寻址的范围受限。
  • 便于编程:通过修改寄存器的内容,可以方便地改变操作数的地址,适合处理数组、表格等数据结构的遍历操作。

4. 应用场景

寄存器间接寻址常用于循环程序中,通过在循环体内对寄存器的内容加1或减1,就能依次访问数组中的每一个元素,非常高效。

[记忆要点]
  • 核心关键词:"寄存器编号"、"有效地址" -- 指令给的是寄存器编号,寄存器里放的是地址(不是数据本身)。
  • 记忆口诀:"指令指寄存器,寄存器指内存" -- 两次"指向",所以叫"间接"。
  • 关键区别:"寄存器寻址"中寄存器存的是操作数,"寄存器间接寻址"中寄存器存的是操作数的地址。一个字之差,含义完全不同。
  • 易混淆点:注意"寄存器间接寻址"只需访问主存1次,而"主存间接寻址"需要访问主存2次。
[教材出处]

第3章 - 指令系统。寄存器间接寻址是指令系统中基本寻址方式之一,在讲解各种操作数寻址方式时详细介绍,通常与立即寻址、直接寻址、寄存器寻址、间接寻址等一起对比讲解。

第22题 (3分)

名词解释:程序状态字寄存器(PSW)

官方答案:记录现行程序的运行状态和指示程序的工作方式。

[知识背景]

计算机在执行程序的过程中,CPU需要随时记录和了解当前程序的运行情况:比如上一次运算的结果是正数还是负数?是否产生了进位?是否溢出?当前CPU是处于用户态还是核心态?是否允许中断?这些信息对于CPU正确执行后续指令至关重要。

程序状态字寄存器(PSW,Program Status Word)就是CPU中专门用来保存这些信息的寄存器。它就像飞机驾驶舱的仪表盘一样,上面的各种指示灯和仪表记录着飞机(程序)当前的飞行状态(运行状态),飞行员(CPU)根据这些信息来决定下一步的操作。

[详细解析]

1. PSW的两大功能

  • 记录运行状态:反映当前程序执行过程中产生的各种状态信息,如运算结果的特征。
  • 指示工作方式:控制CPU的工作模式,如是否允许中断、当前的特权级别等。

2. PSW中的主要标志位

PSW由多个标志位组成,常见的包括:

(1)状态标志(条件码)-- 记录运行结果特征:

  • 零标志(ZF,Zero Flag):运算结果是否为零。ZF=1表示结果为零。
  • 符号标志(SF,Sign Flag):运算结果的符号。SF=1表示结果为负数。
  • 进位标志(CF,Carry Flag):无符号运算是否产生了进位或借位。
  • 溢出标志(OF,Overflow Flag):有符号运算的结果是否超出了表示范围。

(2)控制标志 -- 指示工作方式:

  • 中断允许标志(IF,Interrupt Flag):是否允许CPU响应外部中断请求。
  • 方向标志(DF,Direction Flag):字符串操作时地址的变化方向(递增或递减)。
  • 跟踪标志(TF,Trap Flag):是否进入单步调试模式。

3. PSW的重要作用

  • 条件转移指令的依据:条件转移指令(如"如果结果为零则跳转")就是根据PSW中的标志位来判断是否跳转的。这是PSW最常见的用途之一。
  • 中断处理时的保护与恢复:当发生中断时,CPU需要保存当前程序的PSW(连同程序计数器PC一起),以便中断处理结束后能恢复原程序的运行状态。
  • 程序切换:在操作系统进行进程切换时,PSW是进程上下文的重要组成部分,必须保存和恢复。

4. PSW与PC的区别

PC(程序计数器)记录的是"下一条要执行的指令的地址",而PSW记录的是"当前程序的运行状态和工作方式"。二者都是CPU中非常重要的寄存器,在中断和程序切换时都需要保存和恢复。

[记忆要点]
  • 核心关键词:"运行状态"、"工作方式" -- 官方答案的两个核心要素,必须都写上。
  • 记忆口诀:"PSW两功能:记状态,定方式" -- 一个是记录(被动反映运算结果),一个是指示(主动控制工作模式)。
  • 答题模板:PSW是CPU中的一个专用寄存器,用于记录现行程序的运行状态(如运算结果的零、负、溢出、进位等特征)和指示程序的工作方式(如中断允许、处理器状态等)。
  • 常考关联:PSW常与中断处理过程一起出现在大题中 -- 中断时需要保存PC和PSW,返回时恢复PC和PSW。
[教材出处]

第4章 - 中央处理器。PSW是CPU内部的重要寄存器之一,在讲解CPU的基本组成结构、寄存器组织、以及指令执行过程时详细介绍。同时在中断系统相关章节中也会涉及PSW的保存与恢复。

第23题 (3分)

名词解释:随机存取存储器

官方答案:按地址访问存储器单元,每个存储单元的访问时间是一个常数,与地址大小无关。

[知识背景]

存储器是计算机中用来存放数据和程序的部件。不同类型的存储器有不同的"访问方式",即"怎样找到并读写其中某个数据"的方法。

根据访问方式的不同,存储器可以分为以下几类:

  • 随机存取存储器(RAM,Random Access Memory):可以直接访问任意一个存储单元,且访问任何一个单元所需的时间都相同。
  • 顺序存取存储器(SAM,Sequential Access Memory):必须按照物理顺序依次访问,比如磁带。要读取中间的数据,必须从头开始往后找。
  • 直接存取存储器(DAM,Direct Access Memory):先直接定位到大致区域,再在该区域内顺序查找,比如磁盘。

生活中的比喻:随机存取存储器就像一个书架上排列整齐、编了号的书。你想取第5本还是第500本,直接伸手就能拿到,花的时间几乎一样。而顺序存取存储器就像一卷录像带,你想看中间的内容,必须从头快进到那个位置。

[详细解析]

1. "随机存取"的含义

这里的"随机"并不是"随意"或"不确定"的意思,而是指"任意"。即可以任意地、不按顺序地访问存储器中的任何一个单元。更准确地说,"随机存取"有两层含义:

  • 按地址直接访问:通过给出地址编号,可以直接找到对应的存储单元,不需要从头开始逐个查找。
  • 访问时间与地址无关:无论访问地址为0的单元还是地址为100万的单元,所需时间都是相同的常数。

2. RAM的分类

  • 静态RAM(SRAM):用触发器存储信息,速度快,不需要刷新,但集成度低、成本高、功耗大。常用作高速缓存(Cache)。
  • 动态RAM(DRAM):用电容存储信息,速度较SRAM慢,需要定期刷新以维持数据,但集成度高、成本低。常用作主存储器。

3. RAM的特点

  • 读写方便:既可以读出数据,也可以写入数据,并且读写速度快。
  • 易失性:断电后存储的数据会丢失。这是RAM与ROM(只读存储器)的重要区别。
  • 访问时间恒定:这是"随机存取"最核心的特征,也是与顺序存取、直接存取存储器的根本区别。

4. 与其他存取方式的对比

存取方式 访问时间特点 典型设备
随机存取 与地址无关,恒定 主存、Cache
顺序存取 与数据位置有关,线性增长 磁带
直接存取 先直接后顺序,部分相关 磁盘、光盘
相联存取 按内容查找,与地址无关 相联存储器(TLB)

5. 注意事项

日常口语中,人们常把"RAM"等同于"内存条",但严格来说,RAM是一种存取方式的分类概念,而内存条是使用RAM技术的具体产品。此外,ROM虽然名字中有"只读",但现代的ROM(如Flash存储器)实际上也支持写入操作,且也是随机存取的。所以"随机存取"和"RAM"在严格的技术定义上并不完全等同。

[记忆要点]
  • 核心关键词:"按地址访问"、"访问时间是常数"、"与地址无关" -- 三个要素构成完整定义。
  • 记忆口诀:"随机不随意,按址取,时间定" -- 随机的意思是任意访问,按地址来取,访问时间固定。
  • 答题要点:答题时一定要强调"访问时间与地址无关"这一核心特征,这是区别于顺序存取和直接存取的关键。
  • 常见陷阱:不要把"随机存取存储器"仅仅解释为"能读能写的存储器",重点在于"存取方式"而非"读写能力"。
[教材出处]

第5章 - 存储器层次结构。随机存取存储器是存储器分类中的基本概念,在讲解存储器的分类方式(按存取方式分类)、半导体存储器的工作原理时详细介绍。SRAM和DRAM的工作原理、特点对比是本章重点内容。

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

在现代计算机系统中包括了操作系统、应用程序、计算机硬件、语言处理系统、指令集体系结构等硬件和软件,试画出它们之间的层次结构关系示意图。

官方答案

[知识背景]

现代计算机系统是一个由多个层次组成的复杂系统。最底层是物理硬件,最顶层是用户使用的应用程序,中间的每一层都起着"承上启下"的桥梁作用。

[详细解析]

五个层次从上到下依次为:

+------------------------+ | 应用程序 | 最上层:用户直接使用的程序 +------------------------+ | 语言处理系统 | 编译器、汇编器等 +------------------------+ | 操作系统 | 管理硬件资源,提供系统服务 +------------------------+ | 指令集体系结构(ISA) | 软硬件的分界面 +------------------------+ | 计算机硬件 | 最底层:CPU、内存等物理设备 +------------------------+

各层的含义:

  • 计算机硬件(最底层):由CPU、存储器、I/O设备等物理部件组成,是整个系统的物质基础。
  • 指令集体系结构(ISA):软件和硬件之间的接口,定义了CPU能执行的指令、寄存器、寻址方式等。
  • 操作系统:管理和控制计算机的所有资源,为上层提供服务接口,屏蔽底层硬件的复杂细节。
  • 语言处理系统:包括编译器、汇编器等,将高级语言翻译成机器语言。
  • 应用程序(最顶层):用户直接使用的各种程序。
[记忆要点]

从上到下记忆口诀:"应语操指硬"。关键:ISA是软硬件分界面,每个部分1分。

[教材出处]

第1章 -- 计算机系统概述。

第25题 5分

简述在运算器中用加法器实现补码减法运算的方法,并画出实现电路的示意图(说明:将加法器看成一个整体部件,不需要画出其内部的具体实现)。

官方答案

[知识背景]

补码减法的核心公式:[A-B] = [A] + [-B]。而[-B]可以通过对[B]按位取反再加1得到。CPU利用这个原理,用一个加法器同时完成加法和减法。

[详细解析]

原理:[A-B] = [A] + ~[B] + 1

"按位取反"用异或门实现(B的每一位与Sub信号异或,Sub=1时取反);"加1"通过将加法器Cin置1实现。

电路结构:

Sub(控制信号:0=加法,1=减法) | A -------+----------> 加法器 A端 (n位) | v B ----> XOR门组 ----> 加法器 B端 Cin = Sub (n位) (按位异或) | +---------+---------+ | n位加法器 | +--------------------+ | | Sum Cout (n位结果) ZF SF CF OF 标志位
  • 加法时:Sub=0,B不变(B XOR 0=B),Cin=0,计算 A+B
  • 减法时:Sub=1,B取反(B XOR 1=~B),Cin=1,计算 A+~B+1=A-B
[记忆要点]

"减法=取反+加1+加法"。Sub信号一箭双雕:控制异或门取反 + 控制Cin=1。

[教材出处]

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

第26题 5分

简述微程序控制器中机器指令、微程序、微指令、微命令、微操作之间的对应关系。

官方答案

[知识背景]

微程序控制器用"软件的思想"来设计硬件:将每条机器指令的执行过程编写成一段"微程序",存放在CPU内部的控制存储器中。CPU执行机器指令时,实际是在执行对应的微程序。

[详细解析]

五个概念的对应关系:

  • 一条机器指令 对应 一段微程序(1:1)
  • 一段微程序 由多条 微指令 构成(1:多)
  • 一条微指令 一般产生多个 微命令(1:多)
  • 一个微命令 一般对应 一个微操作(1:1)

类比理解:

概念类比
机器指令一道菜名
微程序完整菜谱
微指令菜谱中的一个步骤
微命令步骤中的具体指令("开火""加盐")
微操作实际执行的动作
[记忆要点]

口诀:"一条指令一段程序,一段程序多条(微)指令,一条(微)指令多个命令,一个命令一个操作"。

[教材出处]

第4章 -- 中央处理器。

第27题 5分

什么是动态存储器的刷新?刷新周期安排方式有哪几种?

官方答案

[知识背景]

DRAM用电容存储数据,电容会漏电,数据会逐渐消失。为防止数据丢失,需要定期给电容重新充电,这就是"刷新"。

[详细解析]

刷新的定义:由于动态存储器依靠栅电容存储信息,而电容容量有限且存在漏电,不能长期保存电荷。为了保证信息不丢失,需要以一定的时间间隔定期为电容补充电荷,这就是DRAM的刷新。

三种刷新周期安排方式:

  • 集中刷新:在刷新周期内集中一段时间刷新所有行,此间存储器不可用(存在"死时间")。
  • 分散刷新:每个存储周期分两段,前半段正常读写,后半段刷新一行。无死时间但存储周期变长。
  • 异步刷新:将刷新操作均匀分散到整个刷新周期中,利用CPU不访存的空闲时间刷新。折中方案,最常用。
[记忆要点]

刷新原因:"电容漏电"。三种方式:"集分异"。集中有死区但平时快;分散无死区但平时慢;异步是折中最常用。

[教材出处]

第5章 -- 存储器层次结构。

五、计算题 (每小题6分,共18分)
第28题 (6分)

IEEE754单精度浮点数的机器数为41A50000H,将其转换为十进制表示的实数。

官方答案:20.625

[知识背景]

IEEE 754单精度浮点数格式(32位):

IEEE 754标准规定了浮点数在计算机中的存储格式。单精度浮点数占32位(4字节),其结构如下:

字段位数位置含义
符号位 s1位第31位(最高位)0表示正数,1表示负数
阶码 E8位第30~23位采用移码表示,偏置值为127
尾数 f23位第22~0位仅存储小数部分(隐含整数位1)

真值计算公式:V = (-1)s × 1.f × 2(E-127)

其中"1.f"表示尾数采用隐含的"1"作为整数部分,即规格化数的尾数总是1.xxxx的形式,存储时只保存小数部分xxxx,从而多获得1位有效精度。

十六进制与二进制的转换:每1位十六进制数对应4位二进制数。例如:A = 1010, 5 = 0101, 0 = 0000。

[详细解析]

第一步:将十六进制转换为二进制

41A50000H 共8位十六进制数,对应32位二进制数,逐位转换:

十六进制41A50000
二进制01000001101001010000000000000000

完整的32位二进制为:0100 0001 1010 0101 0000 0000 0000 0000

第二步:按IEEE 754格式划分各字段

将32位按 1-8-23 的结构划分:

字段二进制值位数
符号位 s01位
阶码 E100000118位
尾数 f010 0101 0000 0000 0000 000023位

对应关系如下(用竖线分隔):

0 | 10000011 | 01001010000000000000000

第三步:解析符号位

s = 0,表示该浮点数为正数

第四步:解析阶码,计算真实指数

阶码 E 的二进制值为 10000011,将其转换为十进制:

E = 1×27 + 0×26 + 0×25 + 0×24 + 0×23 + 0×22 + 1×21 + 1×20

E = 128 + 0 + 0 + 0 + 0 + 0 + 2 + 1 = 131

IEEE 754单精度的偏置值(bias)为127,因此真实指数为:

e = E - 127 = 131 - 127 = 4

第五步:解析尾数

存储的尾数小数部分 f = 01001010000000000000000

加上隐含的整数位"1"后,完整尾数为:

M = 1.0100101 0000 0000 0000 000

有效的非零部分为:1.0100101

第六步:计算浮点数真值

将尾数乘以2的指数次方:

V = 1.0100101 × 24

乘以24即小数点右移4位:

1.0100101 → 10100.101

第七步:将二进制结果转换为十进制

整数部分 10100:

1×24 + 0×23 + 1×22 + 0×21 + 0×20 = 16 + 0 + 4 + 0 + 0 = 20

小数部分 .101:

1×2-1 + 0×2-2 + 1×2-3 = 0.5 + 0 + 0.125 = 0.625

合计:20 + 0.625 = 20.625

最终答案:41A50000H 对应的十进制实数为 20.625

[记忆要点]
  • 格式牢记"1-8-23":单精度浮点数 = 1位符号 + 8位阶码 + 23位尾数,偏置值为127。
  • 隐含的"1":IEEE 754规格化数的尾数隐含一个整数位"1",实际尾数为 1.f,而非 0.f。这是最容易出错的地方。
  • 转换三步走:(1)十六进制转二进制;(2)按1-8-23划分字段;(3)代入公式 (-1)s × 1.f × 2(E-127) 计算。
  • 小数点移位技巧:乘以 2n 就是小数点右移 n 位,乘以 2-n 就是小数点左移 n 位。
  • 十六进制转二进制口诀:每位十六进制数用4位二进制数表示,A=1010, B=1011, C=1100, D=1101, E=1110, F=1111。
[教材出处]

第2章 - 数据的表示和运算。IEEE 754浮点数格式及其表示范围、浮点数与十进制之间的相互转换。

第29题 (6分)

用8位二进制补码计算"-115-(-100)",结果用补码表示,并指出最后标志位SF、CF、OF和ZF分别是多少?

官方答案:[-115-(-100)]补 = 11110001B,SF=1,CF=1,OF=0,ZF=0

[知识背景]

一、补码的概念

补码是计算机中表示有符号整数的最常用方式。对于8位补码:

  • 表示范围:-128 ~ +127
  • 正数的补码与原码相同
  • 负数的补码 = 对应正数各位取反再加1(即"取反加一")
  • 最高位为符号位:0表示正数,1表示负数

二、补码减法转加法

补码运算的核心优势是:减法可转换为加法。A - B = A + (-B),即加上减数的补码的相反数。对于补码取相反数的方法:各位取反再加1。

三、标志位的含义与计算

标志位名称含义计算方法
SF符号标志结果的符号等于运算结果的最高位(第7位)
ZF零标志结果是否为零结果为全0时ZF=1,否则ZF=0
CF进位/借位标志无符号运算是否溢出对于减法:CF = 最高位无进位时为1(即需要借位),有进位时为0;也可理解为 CF = 最高位进位取反(针对减法)
OF溢出标志有符号运算是否溢出OF = 最高位进位 XOR 次高位进位

关于CF在减法中的特殊处理:在x86体系中,减法 A - B 实际执行 A + (~B) + 1,如果加法产生了最高位进位(carry out),说明够减,此时CF=0;如果没有产生最高位进位,说明不够减(需要借位),此时CF=1。即:对于减法,CF = 加法进位取反。

[详细解析]

第一步:求各数的补码

(1)求 [-115] 的补码:

先求 [+115] 的原码:115 = 64 + 32 + 16 + 2 + 1 = 01110011B

[-115] 的补码 = 取反加一:01110011 → 取反 → 10001100 → 加1 → 10001101B

验证:10001101 表示 -128 + 8 + 4 + 1 = -128 + 13 = -115,正确。

(2)求 [-100] 的补码:

先求 [+100] 的原码:100 = 64 + 32 + 4 = 01100100B

[-100] 的补码 = 取反加一:01100100 → 取反 → 10011011 → 加1 → 10011100B

验证:10011100 表示 -128 + 16 + 8 + 4 = -128 + 28 = -100,正确。

(3)求 [+100] 的补码(即 -(-100) 的补码):

[+100] 的补码 = 01100100B(正数的补码就是其本身)

第二步:将减法转换为加法

-115 - (-100) = -115 + 100

用补码运算:[-115]补 + [100]补 = 10001101B + 01100100B

第三步:逐位二进制加法

我们从最低位(第0位)开始逐位相加,记录每一位的进位:

位位置第7位第6位第5位第4位第3位第2位第1位第0位
A(-115补)10001101
B(+100补)01100100
进位0←0←0←0←1←1←0←0←
结果11110001

详细计算过程(从低位到高位):

  • 第0位:1 + 0 + 进位0 = 1,进位0
  • 第1位:0 + 0 + 进位0 = 0,进位0
  • 第2位:1 + 1 + 进位0 = 10,写0进1
  • 第3位:1 + 0 + 进位1 = 10,写0进1
  • 第4位:0 + 0 + 进位1 = 1,进位0
  • 第5位:0 + 1 + 进位0 = 1,进位0
  • 第6位:0 + 1 + 进位0 = 1,进位0
  • 第7位(最高位):1 + 0 + 进位0 = 1,最高位进位C7 = 0

运算结果为:11110001B

最高位(第7位)产生的进位 C7 = 0(无进位输出)

次高位(第6位)产生的进位 C6 = 0

第四步:验证结果

11110001B 作为补码表示的值 = -128 + 64 + 32 + 16 + 1 = -128 + 113 = -15

真实运算:-115 - (-100) = -115 + 100 = -15,结果正确。

第五步:确定各标志位

(1)SF(符号标志)= 结果最高位 = 1(结果为负数)

(2)ZF(零标志):结果为 11110001B,不是全零,所以 ZF = 0

(3)CF(进位/借位标志)

本题是减法运算。减法 A - B 在硬件中实际执行的是 A + (~B) + 1。

我们上面计算的 [-115]补 + [100]补 = 10001101 + 01100100,最高位进位 C7 = 0。

但原始运算是减法 -115 - (-100),即 10001101 - 10011100。硬件执行的是 10001101 + (~10011100) + 1 = 10001101 + 01100011 + 1 = 10001101 + 01100100。这与我们上面的计算一致,最高位进位为0。

对于减法,CF = 最高位进位取反 = NOT(0) = 1(表示发生了借位)。

(4)OF(溢出标志)

OF = C7 XOR C6 = 0 XOR 0 = 0(无溢出)

也可从逻辑角度验证:两个操作数一负一正(-115为负,+100为正),异号相加不可能溢出,所以OF=0。

最终结果:

项目
运算结果(补码)11110001B
SF1
CF1
OF0
ZF0
[记忆要点]
  • 补码求法口诀"取反加一":正数变负数或负数变正数,都是"各位取反,末位加一"。
  • 补码减法转加法:A - B = A + (-B),对B的补码再取补即得 -B 的补码。
  • SF直接看最高位:运算结果最高位是什么,SF就是什么。
  • ZF看结果是否全零:全零则ZF=1,否则ZF=0。
  • CF在减法中取反:减法的CF = 加法最高位进位取反。进位为0说明不够减,CF=1。
  • OF看最高两位进位异或:OF = Cn-1 XOR Cn-2;也可记忆:同号相加才可能溢出,异号相加不会溢出。
  • 快速验算技巧:将补码结果转换为真值,与直接算术运算结果比较,可验证计算是否正确。
[教材出处]

第2章 - 数据的表示和运算。补码的表示与运算、定点数的加减运算、标志位(SF/CF/OF/ZF)的产生与含义。

第30题 (6分)

一个高级语言程序被编译器编译生成可执行的指令序列,在时钟频率为1GHz的机器上运行,目标指令序列中用到的指令类型有A、B、C和D四类。四类指令在机器上的CPI和各类指令条数如下表所示。

指令类型ABCD
各类指令的CPI1234
各类指令条数4523

该程序的CPI为多少?执行时间为多少ns?计算结果保留到小数点后1位。

官方答案:CPI = 2.3,执行时间 = 32.0ns

[知识背景]

一、CPI(Cycles Per Instruction,每条指令的平均时钟周期数)

CPI是衡量CPU性能的重要指标之一。对于包含多种类型指令的程序:

程序总时钟周期数 = 各类指令的(CPI × 该类指令条数)之和

即:总周期数 = ∑(CPIi × Ni),其中 i 遍历所有指令类型

程序的CPI = 总时钟周期数 / 总指令条数 = ∑(CPIi × Ni) / ∑Ni

二、CPU执行时间

CPU性能公式(CPU Performance Equation):

CPU执行时间 = 总时钟周期数 × 时钟周期 = 总时钟周期数 / 时钟频率

其中:时钟周期 = 1 / 时钟频率。

若时钟频率为 1GHz = 109 Hz,则时钟周期 = 1ns(纳秒)。

三、性能指标之间的关系

CPU执行时间 = 指令条数 × CPI × 时钟周期 = 指令条数 × CPI / 时钟频率

这三个因素(指令条数、CPI、时钟频率)分别受到指令集架构、CPU微架构设计和制造工艺的影响。

[详细解析]

第一步:计算总指令条数

程序中所有指令的总条数 = A类 + B类 + C类 + D类

= 4 + 5 + 2 + 3 = 14 条

第二步:计算总时钟周期数

每类指令所消耗的时钟周期数分别计算:

指令类型CPI指令条数消耗周期数 = CPI × 条数
A141 × 4 = 4
B252 × 5 = 10
C323 × 2 = 6
D434 × 3 = 12
合计-1432

总时钟周期数 = 4 + 10 + 6 + 12 = 32 个时钟周期

第三步:计算程序的CPI

CPI = 总时钟周期数 / 总指令条数

CPI = 32 / 14 = 2.285714...

保留到小数点后1位(四舍五入):CPI = 2.3

第四步:计算执行时间

已知时钟频率 f = 1GHz = 109 Hz

时钟周期 T = 1 / f = 1 / 109 s = 1ns

执行时间 = 总时钟周期数 × 时钟周期 = 32 × 1ns = 32.0ns

也可以用公式直接计算:

执行时间 = 总时钟周期数 / 时钟频率 = 32 / (1 × 109) s = 32 × 10-9 s = 32ns

最终答案:

指标结果
程序的CPI2.3
执行时间32.0ns
[记忆要点]
  • CPI计算公式:CPI = 总周期数 / 总指令数 = ∑(CPIi × Ni) / ∑Ni,本质上是加权平均值。
  • CPU时间公式:执行时间 = 总周期数 / 时钟频率 = 总周期数 × 时钟周期。这是计算机性能分析中最基本的公式。
  • 1GHz = 1ns周期:频率和周期互为倒数。1GHz 对应 1ns,2GHz 对应 0.5ns,以此类推。记住这个对应关系可以快速心算。
  • 注意单位换算:1GHz = 109Hz,1ns = 10-9s。计算时注意单位一致性。
  • 审题注意保留位数:题目要求"保留到小数点后1位",32/14 = 2.285... 需四舍五入为 2.3。不要写成 2.28 或忘记保留要求。
[教材出处]

第1章 - 计算机系统概述。计算机系统的性能指标,包括时钟频率、CPI、MIPS、CPU执行时间等概念及其计算方法。第4章 - 中央处理器部分也涉及指令执行周期的分析。

六、综合应用题 (第31题12分,第32题10分,共22分)
第31题 12分

某计算机字长16位,采用16位定长指令格式,部分数据通路结构如题31图所示。假设MAR的输出一直处于使能状态,对于指令 SUB R1,(R2),请回答下列两问。

(1) 在执行阶段需要多少个节拍?

(2) 每个节拍的功能是什么?需要哪些有效控制信号?

注:该指令功能为:R[R1] ← R[R1] - M[R[R2]]

官方答案

[知识背景]

数据通路是CPU内部数据流经的路径。指令执行过程就是在控制信号驱动下,数据在各部件间传送和运算。

关键部件:MAR(地址寄存器)、MDR(数据寄存器)、R1~RN(通用寄存器)、Y(ALU输入暂存器)、ALU(运算单元)、Z(结果暂存器)。单总线每拍只允许一个源输出。

[详细解析]

指令 SUB R1,(R2) 的功能:R1 = R1 - M[R2](R1的值减去内存中R2所指地址的数据)

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

(2) 各节拍的控制信号与功能:

节拍控制信号功能数据流向
1R2out, MARinMAR ← (R2)R2 → 总线 → MAR
2MemRMDR ← M(MAR)内存 → MDR
3R1out, YinY ← (R1)R1 → 总线 → Y
4MDRout, SUBZ ← Y - (MDR)MDR → ALU的B端,Y提供A端,结果存Z
5Zout, R1inR1 ← (Z)Z → 总线 → R1

为什么可以是4拍?节拍2(MemR读内存)和节拍3(R1送Y)可以并行,因为一个用内存数据总线,一个用CPU内部总线,互不冲突。

[记忆要点]

解题流程:取地址 → 访存取数 → 暂存操作数到Y → ALU运算 → 写回结果。单总线每拍一个源输出,ALU两操作数需一个先存Y。

[教材出处]

第4章 -- 中央处理器。

第32题 10分

假定主存与Cache之间采用4路组相联映射方式,数据块大小为512字节,Cache数据区容量为32k字节,主存空间大小为1M字节,按字节编址。问:

(1) 主存地址划分为哪几个部分?每个部分分别是哪几位地址?

(2) Cache总容量是多少bit?(包含有效位V)

官方答案

[知识背景]

Cache是CPU和主存之间的高速缓冲器。组相联映射是将Cache分成若干组,每个主存块映射到固定组,组内任选位置。"4路"表示每组4行。

主存地址划分为三部分:标记(Tag) | 组号(Index) | 块内地址(Offset)

[详细解析]

(1) 主存地址划分

主存 = 1M = 220 字节 → 地址共 20位

块大小 = 512 = 29 字节 → 块内地址 9位(A8~A0

Cache行数 = 32KB / 512B = 64行

组数 = 64行 / 4路 = 16组 = 24 → 组号 4位(A12~A9

标记 = 20 - 9 - 4 = 7位(A19~A13

标记 7位 A19~A13
组号 4位 A12~A9
块内地址 9位 A8~A0

(2) Cache总容量

每行 = 有效位V(1位) + 标记(7位) + 数据(512×8=4096位) = 4104位

Cache总容量 = 64行 × 4104位 = 262656 bit

等价算法:32KB + (7+1)×64 = 32768B + 64B = 32832B = 262656 bit

[记忆要点]

四步法:(1)总地址位数 (2)块内地址=log2(块大小) (3)组号=log2(行数/路数) (4)标记=总-块内-组号。总容量=行数×(V+Tag+数据位)。

[教材出处]

第5章 -- 存储器层次结构。