下列选项中表示计算机浮点操作速度的指标是
计算机的性能可以用多种指标来衡量,不同的指标反映了计算机不同方面的能力。常见的性能指标包括:
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等概念及其含义。
IEEE754单精度(32位)浮点数表示格式中,移码表示的阶码偏置常数是
IEEE 754是国际标准的浮点数表示规范。单精度浮点数(32位)的格式如下:
阶码部分采用"移码"(也叫偏移码)表示法。所谓移码,就是将真实的指数值加上一个固定的偏置常数(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浮点数标准,包括单精度和双精度浮点数的格式、阶码的移码表示及偏置常数的计算。
在计算机中,浮点数加减运算的对阶操作是
浮点数的加减运算不像整数运算那样简单,因为浮点数由阶码(指数)和尾数两部分组成。两个浮点数要进行加减运算,必须先使它们的阶码相同(即小数点对齐),这个过程称为"对阶"。
对阶的基本原则是"小阶向大阶看齐",即把阶码较小的那个数的阶码增大到与阶码较大的数相同。阶码每增大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章 -- 数据的表示和运算。本章介绍了浮点数加减运算的步骤:对阶、尾数加减、规格化、舍入、溢出判断,其中对阶是第一步也是最关键的一步。
8位二进制定点整数的补码X表示范围是
在计算机中,有符号整数通常采用补码表示法。补码的最大优点是可以将减法转化为加法,简化硬件电路设计。
对于n位二进制补码整数(包含1位符号位):
对于8位补码整数:n=8,所以范围为 -2^7 到 2^7 - 1,即 -128 到 127。
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章 -- 数据的表示和运算。本章介绍了原码、反码、补码的表示方法以及各种编码的表示范围。
两个n位的补码数相加,Cn和Cn-1分别是最高位和次高位产生的进位,溢出产生的逻辑表达式为
在补码加法运算中,溢出是指运算结果超出了补码所能表示的范围。对于n位补码,溢出发生在以下两种情况:
判断溢出的方法之一是利用最高位(符号位)的进位Cn和次高位(数值最高位)的进位Cn-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章 -- 数据的表示和运算。本章介绍了补码加减法运算以及溢出的判断方法,包括单符号位判溢出法和双符号位(变形补码)判溢出法。
指令中提供了寄存器号和一个常数,若操作数地址等于寄存器内容与常数之和,则该操作数的寻址方式为
寻址方式是指令系统中确定操作数地址的方法。常见的寻址方式有:
这三种变体的共同特征都是:有效地址 = 寄存器内容 + 常数,因此它们统称为"偏移寻址"。
A. 直接寻址 -- 错误。直接寻址是指令中直接给出操作数的内存地址,不涉及寄存器。而题目明确说"指令中提供了寄存器号和一个常数",这不是直接寻址。
B. 寄存器寻址 -- 错误。寄存器寻址是指操作数就在寄存器中,指令只需给出寄存器号即可。而题目说操作数地址等于"寄存器内容与常数之和",说明操作数在内存中,需要计算地址,不是简单的寄存器寻址。
C. 偏移寻址 -- 正确。偏移寻址的定义就是:有效地址 = 寄存器内容 + 偏移常数。题目所描述的情况完全符合偏移寻址的特征——指令提供寄存器号和常数,两者相加得到操作数的有效地址。
D. 间接寻址 -- 错误。间接寻址是指指令给出的地址中存放的不是操作数本身,而是操作数的地址。题目描述的是地址的计算方式(寄存器+常数),不涉及"地址的地址"这一概念。
偏移寻址的核心公式:有效地址 EA = (寄存器) + 常数。只要看到"寄存器内容加上一个常数得到地址",就是偏移寻址。偏移寻址是基址寻址、变址寻址、相对寻址的统称,它们的共同点都是"寄存器+常数"。
第3章 -- 指令系统。本章详细介绍了各种寻址方式,包括立即寻址、直接寻址、寄存器寻址、间接寻址、偏移寻址(基址、变址、相对)等。
下列表述中最符合RISC计算机的是
计算机指令系统的设计理念分为两大流派:
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两种指令集设计思想的区别,包括指令条数、指令格式、寻址方式、访存方式等方面的差异。
在采用微程序控制器的计算机中微程序存放在
微程序控制器是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章 -- 中央处理器。本章介绍了控制器的两种实现方式:硬布线控制器和微程序控制器,详细讲解了微程序、微指令、控制存储器等概念。
高速缓存一般采用
高速缓存(Cache)是位于CPU和主存之间的一级高速小容量存储器,用于缓解CPU和主存之间速度差距过大的矛盾。CPU访问Cache的速度远快于访问主存。
存储器按照存储元件的工作原理可以分为:
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的基本概念和实现技术。
中断响应过程中的保存断点是指
中断是指CPU在正常执行程序的过程中,由于某种事件(如I/O设备请求、定时器到期、程序异常等)的发生,暂停当前程序的执行,转去处理该事件,处理完毕后再返回原来被中断的程序继续执行。
中断响应过程中,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章 -- 互连及输入输出组织。本章介绍了中断系统的工作原理,包括中断请求、中断响应、中断处理和中断返回的完整过程,重点讲解了保存断点和保存现场的区别。
在电子数字计算机的发展过程中,各个时代都有其代表性的电子器件,第一代是电子管,第二代是______,从第三代开始主要器件是______。
电子数字计算机的发展历程通常按照所采用的核心电子器件来划分为不同的"代"。每一代的更替,都意味着计算机在体积、速度、功耗、可靠性和成本等方面发生了质的飞跃。理解这个发展脉络是学习计算机组成原理的起点。
计算机的四代划分如下:
本题考查的是计算机发展史中各代的标志性电子器件。
题目已经给出"第一代是电子管",要求填写第二代和第三代开始的主要器件。
第二代是晶体管:1947年贝尔实验室发明了晶体管,它是一种利用半导体材料制成的固态电子器件,能够实现信号的放大和开关功能。与电子管相比,晶体管的优势在于:体积仅为电子管的几十分之一,功耗大大降低,工作更加可靠,寿命更长。因此晶体管取代电子管成为第二代计算机的核心器件。
从第三代开始主要器件是集成电路:1958年杰克·基尔比发明了集成电路,将晶体管、电阻、电容等元器件及其连线全部制作在同一块半导体基片上。从第三代计算机开始,核心器件就是集成电路,只是集成度不同——第三代为中小规模集成电路,第四代为大规模/超大规模集成电路。因此题目说"从第三代开始",强调的是集成电路这一大类器件。
四代计算机的核心器件,按照时间顺序排列:电子管 -> 晶体管 -> 集成电路(中小规模) -> 集成电路(大规模/超大规模)。
简记口诀:"管、体管、集成路"——电子管、晶体管、集成电路,每一代都是前一代的微型化和集成化的结果。
注意第三代和第四代的主要器件都是"集成电路",区别在于集成度不同。所以题目说"从第三代开始主要器件是集成电路"是完全正确的。
第1章 计算机系统概述 -- 计算机的发展历程
主机对外设端口的编址方式分为______和______。
在计算机系统中,CPU要与外部设备(如键盘、显示器、磁盘等)进行数据交换,就需要通过"I/O端口"(也称接口寄存器)来实现。每个I/O端口都需要有一个地址,CPU才能找到它并与之通信。
问题的关键在于:这些I/O端口的地址如何分配?是和主存储器共用一套地址空间,还是单独使用另一套地址空间?这就是"编址方式"要解决的问题。
主机对外设端口有两种编址方式:
本题考查I/O端口的编址方式。
外设单独编址的特点:
外设统一编址的特点:
两种编址方式的核心区别:"单独"是地址空间分开,"统一"是地址空间合并。
联想记忆:想象一栋大楼——"单独编址"就像楼里的办公室和商店有两套不同的门牌号系统,找商店要用商店专用的号码;"统一编址"就像所有房间不管办公还是商铺,都用同一套门牌号,按号码找就行。
代表处理器:x86用单独编址(有IN/OUT指令),MIPS用统一编址(无专用I/O指令)。
第6章 互连及输入输出组织 -- I/O端口及其编址方式
主存与Cache的地址映射方式有______、全相联映射和______三种方式。
Cache(高速缓冲存储器)是位于CPU和主存之间的一级高速小容量存储器,用来存放CPU近期最常使用的数据和指令,以弥补CPU与主存之间的速度差距。
由于Cache的容量远小于主存,主存中的数据只能部分地存放在Cache中。这就产生了一个核心问题:主存的某个数据块应该放到Cache的哪个位置?这就是"地址映射"问题。
地址映射方式有三种:
本题考查Cache的三种地址映射方式。题目已经给出"全相联映射",要求填写另外两种。
直接映射:可以看作"一对一"的映射关系。每个主存块只有唯一一个可以存放的Cache位置。好比学校宿舍分配,每个学生只能住指定的某一间宿舍。优点是查找速度快(只需检查一个位置),缺点是如果多个常用的主存块映射到同一个Cache行,就会频繁替换,产生"抖动"现象。
组相联映射:可以看作"组间直接映射、组内全相联映射"。先按直接映射的规则确定属于哪个组,然后在组内可以自由放置。例如"2路组相联"表示每组有2个Cache行。好比宿舍分配中,每个学生被分到某一间宿舍,但这间宿舍有多个床位可以任选。这种方式兼顾了查找速度和冲突率,是现代处理器中最常用的映射方式。
三种方式的关系:直接映射是"1路组相联"的特例,全相联映射是"Cache块数路组相联"的特例。因此组相联映射是最一般的形式。
三种映射方式的记忆口诀:"直、全、组"——直接映射、全相联映射、组相联映射。
从灵活性角度排列:直接映射(最不灵活)< 组相联映射(折中)< 全相联映射(最灵活)。
从硬件复杂度角度排列:直接映射(最简单)< 组相联映射(折中)< 全相联映射(最复杂)。
核心规律:灵活性越高 -> 冲突越少 -> Cache利用率越高 -> 但硬件越复杂。
第5章 存储器层次结构 -- Cache的地址映射方式
常见的输入/输出传输控制方式有直接程序传输方式、______和______。
输入/输出(I/O)传输控制方式,是指CPU与外部设备之间进行数据传输时,由谁来控制传输过程、CPU在传输期间是否可以做其他工作等问题的解决方案。
I/O传输控制方式的发展,核心目标是让CPU尽可能少地参与I/O操作,从而提高CPU的利用率和整个系统的效率。
常见的三种I/O传输控制方式:
本题考查I/O传输的三种基本控制方式。题目已给出"直接程序传输方式",要求填写另外两种。
中断传输方式是对直接程序传输方式的改进。核心思想是"不再忙等,而是等通知"。就像去餐厅吃饭:直接程序传输方式相当于你一直盯着厨房看菜做好了没有;中断方式相当于你拿了一个叫号器,菜做好了服务员会叫你,你在等待期间可以做别的事。中断方式的数据传输仍然需要CPU执行程序来完成,每次传输的基本单位是一个字(或字节)。
DMA传输方式是对中断方式的进一步改进。核心思想是"连传输过程都不要CPU操心"。DMA控制器接管了总线控制权,直接在外设和主存之间传输数据。就像有一个专门的搬运工帮你搬东西,你只需要告诉他从哪搬到哪、搬多少,然后就可以去做别的事了。DMA方式的传输速度远高于中断方式,因为不需要CPU逐字参与。
三种方式的CPU参与程度递减:直接程序传输(CPU全程参与)> 中断传输(CPU在中断时参与)> DMA传输(CPU基本不参与传输过程)。
三种I/O传输控制方式按发展顺序:直接程序传输 -> 中断传输 -> DMA传输。
记忆口诀:"程(程序查询)中(中断)DMA"。
核心演进规律:CPU的参与程度越来越少,系统效率越来越高。还有更高级的方式如通道方式和I/O处理机方式,但本题考查的是最基本的三种。
第6章 互连及输入输出组织 -- 输入输出传输控制方式
MIPS指令系统中指令的格式分为______型、______型和J型三种类型。
MIPS(Microprocessor without Interlocked Pipeline Stages)是一种经典的精简指令集计算机(RISC)架构。MIPS指令系统的一个重要特点是所有指令都是固定的32位长度,但根据操作类型和操作数的不同,分为三种指令格式。
MIPS的三种指令格式:
本题考查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指令格式
IEEE754单精度浮点数用二进制表示时,阶码的长度为______位,尾数的长度为______位。
IEEE 754是国际电气和电子工程师协会(IEEE)制定的浮点数运算标准,几乎所有现代计算机和编程语言都遵循这一标准。
浮点数的一般表示形式为:(-1)S x 1.M x 2E-偏移量,其中S是符号位,M是尾数(小数部分),E是阶码(指数部分)。
IEEE 754定义了两种常用的浮点数格式:
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单精度表示:
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浮点数标准
Intel将外部中断分为______中断和______中断。
中断是计算机系统中一种重要的机制,它允许外部事件打断CPU当前正在执行的程序,转去处理紧急事务。中断按照来源可以分为内部中断(由CPU内部产生,如除法溢出、非法指令等)和外部中断(由CPU外部的设备产生,如键盘输入、定时器到期等)。
在Intel处理器体系中,外部中断又进一步细分为两类:
本题考查Intel处理器对外部中断的分类。
可屏蔽中断的关键特征:
非屏蔽中断的关键特征:
外部中断的两种类型:可屏蔽中断和非屏蔽中断。区分的标准就是"能不能被软件屏蔽"。
联想记忆:把中断想象成别人找你说话——"可屏蔽中断"就像普通同事找你聊天,你忙的时候可以说"等一下"(屏蔽);"非屏蔽中断"就像消防警报,不管你在做什么都必须立刻响应。
对应引脚:可屏蔽中断 -> INTR引脚,非屏蔽中断 -> NMI引脚。
第6章 互连及输入输出组织 -- 中断系统与中断分类
磁盘存储器的平均存取时间主要包括寻道时间、______时间和数据传输时间三个部分。
磁盘存储器(硬盘)是一种机械式的外部存储设备,其内部由一个或多个高速旋转的磁性盘片和在盘片表面移动的读写磁头组成。由于涉及机械运动,磁盘的数据访问速度远慢于半导体存储器(如内存、Cache)。
要理解磁盘的存取时间,需要先了解磁盘的物理结构:
磁盘读取数据的过程需要三个步骤:
本题考查磁盘存储器平均存取时间的三个组成部分。题目已给出"寻道时间"和"数据传输时间",要求填写第三个部分。
磁盘的平均存取时间 = 寻道时间 + 旋转等待时间 + 数据传输时间
寻道时间(Seek Time):磁头从当前磁道移动到目标磁道所需的时间。这取决于磁头需要跨越的磁道数量。寻道时间是三个部分中耗时最长的,通常在几毫秒到十几毫秒之间。
旋转等待时间(Rotational Latency,也称旋转延迟):磁头到达目标磁道后,等待目标扇区旋转到磁头正下方所需的时间。平均旋转等待时间等于磁盘旋转半周的时间。例如,一个7200转/分钟(RPM)的硬盘,每转一圈需要 60/7200 = 8.33毫秒,因此平均旋转等待时间约为 8.33/2 = 4.17毫秒。
数据传输时间(Transfer Time):磁头读取(或写入)目标扇区数据所需的时间。这取决于要传输的数据量和磁盘的数据传输速率。通常这部分时间最短。
在实际系统中,寻道时间和旋转等待时间占了平均存取时间的绝大部分,这也是为什么固态硬盘(SSD,无机械运动部件)比机械硬盘快得多的根本原因。
磁盘平均存取时间的三个部分:寻道时间 + 旋转等待时间 + 数据传输时间。
联想记忆:想象去图书馆借书的过程——
时间大小关系:通常寻道时间 > 旋转等待时间 > 数据传输时间。
注意"旋转等待"也可能写作"旋转延迟"或"等待时间",不同教材用词可能略有不同,但概念相同。
第5章 存储器层次结构 -- 磁盘存储器
名词解释:(计算机的)字长
计算机内部所有的信息(数字、文字、指令等)都是用二进制(0和1)来表示的。每一个0或1称为一个"位"(bit)。计算机在工作时,并不是一位一位地处理数据,而是一次同时处理一组二进制位。这一组二进制位就构成了一个"字"(Word),而这一组中包含多少个二进制位,就是"字长"(Word Length)。
字长是计算机最核心的性能指标之一。我们平时说的"32位计算机"或"64位计算机",指的就是这台计算机的字长分别是32位和64位。字长越长,计算机一次能处理的数据量就越大,运算精度也越高,性能通常也越强。
打个比方:如果把计算机比作一条公路,字长就相当于公路的车道数。8位字长相当于8车道,一次能通过8辆车;64位字长相当于64车道,一次能通过64辆车,运输能力显然更强。
1. 字长的定义
字长是指计算机在一次操作中能够同时处理(运算、传输、存储)的二进制数据的位数。它反映了计算机的基本数据处理能力。
2. 字长与各部件的关系
3. 字长的发展历程
4. 字长对性能的影响
5. 注意区分
字长不等于字节(Byte)。字节固定为8位,而字长可以是8位、16位、32位、64位等,取决于具体的计算机设计。一个字包含的字节数 = 字长 / 8。
第1章 - 计算机系统概述。字长是计算机的基本性能指标之一,在介绍计算机硬件系统的基本组成和主要技术指标时讲解。
名词解释:奇偶校验码
数据在计算机内部传输或存储时,可能会因为电磁干扰、硬件故障等原因发生错误,比如某一位从0变成了1,或者从1变成了0。为了检测这种错误,人们发明了各种"校验码",而奇偶校验码是其中最简单、最基础的一种。
奇偶校验码的基本思想非常简单:在原始数据的基础上额外添加一个二进制位(称为校验位),通过让所有位中"1"的总数保持为奇数或偶数,来检测数据是否发生了错误。
打个比方:假设你要寄一箱10个苹果给朋友,你担心快递途中苹果丢失。你可以在箱子里放一张纸条写"总共10个",朋友收到后数一数,如果不是10个就知道出了问题。奇偶校验码的原理与此类似,只不过它"数"的是二进制数据中1的个数。
1. 基本原理
假设原始数据为 n 位,奇偶校验码在这 n 位数据的基础上增加 1 位校验位,使总编码变为 n+1 位。校验位的值(0或1)由以下规则确定:
2. 具体示例
假设原始数据为 1010110(7位,其中有4个1):
3. 检错过程
接收方收到数据后,数一数所有位中"1"的个数:
4. 能力与局限
5. 与其他校验码的比较
第2章 - 数据的表示和运算。奇偶校验码属于数据校验的基本方法,在讲解数据的检错与纠错编码时介绍,通常与海明码、CRC码等一起讨论。
名词解释:寄存器间接寻址
要理解"寄存器间接寻址",首先要理解几个基本概念:
寻址方式:计算机执行指令时,需要找到操作数(即要参与运算的数据)。"寻址方式"就是告诉计算机"去哪里找操作数"的方法。不同的寻址方式就像不同的"找东西"策略。
寄存器:CPU内部的高速小容量存储器,存取速度极快,但数量有限。
有效地址:操作数在主存储器中的实际存放地址。
生活中的比喻:假设你要找一个人。"直接寻址"就好比有人告诉你"这个人住在A小区301室",你直接去那个地址找。"寄存器间接寻址"就好比有人告诉你"地址写在张三的笔记本上",你先找到张三的笔记本(寄存器),打开看到里面写的地址"A小区301室",然后再去那个地址找人。多了一步"中转"。
1. 寻址过程详解
寄存器间接寻址的完整过程分为两步:
用公式表示:有效地址 EA = (Ri),即有效地址等于寄存器 Ri 的内容。操作数 = M[EA] = M[(Ri)],即操作数等于主存中该地址对应单元的内容。
2. 与相关寻址方式的对比
| 寻址方式 | 指令中给出 | 寄存器中存放 | 访存次数 |
|---|---|---|---|
| 寄存器直接寻址 | 寄存器编号 | 操作数本身 | 0次 |
| 寄存器间接寻址 | 寄存器编号 | 操作数的地址 | 1次 |
| 直接寻址 | 主存地址 | -- | 1次 |
| 间接寻址(主存) | 主存地址 | -- | 2次 |
3. 寄存器间接寻址的优点
4. 应用场景
寄存器间接寻址常用于循环程序中,通过在循环体内对寄存器的内容加1或减1,就能依次访问数组中的每一个元素,非常高效。
第3章 - 指令系统。寄存器间接寻址是指令系统中基本寻址方式之一,在讲解各种操作数寻址方式时详细介绍,通常与立即寻址、直接寻址、寄存器寻址、间接寻址等一起对比讲解。
名词解释:程序状态字寄存器(PSW)
计算机在执行程序的过程中,CPU需要随时记录和了解当前程序的运行情况:比如上一次运算的结果是正数还是负数?是否产生了进位?是否溢出?当前CPU是处于用户态还是核心态?是否允许中断?这些信息对于CPU正确执行后续指令至关重要。
程序状态字寄存器(PSW,Program Status Word)就是CPU中专门用来保存这些信息的寄存器。它就像飞机驾驶舱的仪表盘一样,上面的各种指示灯和仪表记录着飞机(程序)当前的飞行状态(运行状态),飞行员(CPU)根据这些信息来决定下一步的操作。
1. PSW的两大功能
2. PSW中的主要标志位
PSW由多个标志位组成,常见的包括:
(1)状态标志(条件码)-- 记录运行结果特征:
(2)控制标志 -- 指示工作方式:
3. PSW的重要作用
4. PSW与PC的区别
PC(程序计数器)记录的是"下一条要执行的指令的地址",而PSW记录的是"当前程序的运行状态和工作方式"。二者都是CPU中非常重要的寄存器,在中断和程序切换时都需要保存和恢复。
第4章 - 中央处理器。PSW是CPU内部的重要寄存器之一,在讲解CPU的基本组成结构、寄存器组织、以及指令执行过程时详细介绍。同时在中断系统相关章节中也会涉及PSW的保存与恢复。
名词解释:随机存取存储器
存储器是计算机中用来存放数据和程序的部件。不同类型的存储器有不同的"访问方式",即"怎样找到并读写其中某个数据"的方法。
根据访问方式的不同,存储器可以分为以下几类:
生活中的比喻:随机存取存储器就像一个书架上排列整齐、编了号的书。你想取第5本还是第500本,直接伸手就能拿到,花的时间几乎一样。而顺序存取存储器就像一卷录像带,你想看中间的内容,必须从头快进到那个位置。
1. "随机存取"的含义
这里的"随机"并不是"随意"或"不确定"的意思,而是指"任意"。即可以任意地、不按顺序地访问存储器中的任何一个单元。更准确地说,"随机存取"有两层含义:
2. RAM的分类
3. RAM的特点
4. 与其他存取方式的对比
| 存取方式 | 访问时间特点 | 典型设备 |
|---|---|---|
| 随机存取 | 与地址无关,恒定 | 主存、Cache |
| 顺序存取 | 与数据位置有关,线性增长 | 磁带 |
| 直接存取 | 先直接后顺序,部分相关 | 磁盘、光盘 |
| 相联存取 | 按内容查找,与地址无关 | 相联存储器(TLB) |
5. 注意事项
日常口语中,人们常把"RAM"等同于"内存条",但严格来说,RAM是一种存取方式的分类概念,而内存条是使用RAM技术的具体产品。此外,ROM虽然名字中有"只读",但现代的ROM(如Flash存储器)实际上也支持写入操作,且也是随机存取的。所以"随机存取"和"RAM"在严格的技术定义上并不完全等同。
第5章 - 存储器层次结构。随机存取存储器是存储器分类中的基本概念,在讲解存储器的分类方式(按存取方式分类)、半导体存储器的工作原理时详细介绍。SRAM和DRAM的工作原理、特点对比是本章重点内容。
在现代计算机系统中包括了操作系统、应用程序、计算机硬件、语言处理系统、指令集体系结构等硬件和软件,试画出它们之间的层次结构关系示意图。
现代计算机系统是一个由多个层次组成的复杂系统。最底层是物理硬件,最顶层是用户使用的应用程序,中间的每一层都起着"承上启下"的桥梁作用。
五个层次从上到下依次为:
各层的含义:
从上到下记忆口诀:"应语操指硬"。关键:ISA是软硬件分界面,每个部分1分。
第1章 -- 计算机系统概述。
简述在运算器中用加法器实现补码减法运算的方法,并画出实现电路的示意图(说明:将加法器看成一个整体部件,不需要画出其内部的具体实现)。
补码减法的核心公式:[A-B]补 = [A]补 + [-B]补。而[-B]补可以通过对[B]补按位取反再加1得到。CPU利用这个原理,用一个加法器同时完成加法和减法。
原理:[A-B]补 = [A]补 + ~[B]补 + 1
"按位取反"用异或门实现(B的每一位与Sub信号异或,Sub=1时取反);"加1"通过将加法器Cin置1实现。
电路结构:
"减法=取反+加1+加法"。Sub信号一箭双雕:控制异或门取反 + 控制Cin=1。
第2章 -- 数据的表示和运算。
简述微程序控制器中机器指令、微程序、微指令、微命令、微操作之间的对应关系。
微程序控制器用"软件的思想"来设计硬件:将每条机器指令的执行过程编写成一段"微程序",存放在CPU内部的控制存储器中。CPU执行机器指令时,实际是在执行对应的微程序。
五个概念的对应关系:
类比理解:
| 概念 | 类比 |
|---|---|
| 机器指令 | 一道菜名 |
| 微程序 | 完整菜谱 |
| 微指令 | 菜谱中的一个步骤 |
| 微命令 | 步骤中的具体指令("开火""加盐") |
| 微操作 | 实际执行的动作 |
口诀:"一条指令一段程序,一段程序多条(微)指令,一条(微)指令多个命令,一个命令一个操作"。
第4章 -- 中央处理器。
什么是动态存储器的刷新?刷新周期安排方式有哪几种?
DRAM用电容存储数据,电容会漏电,数据会逐渐消失。为防止数据丢失,需要定期给电容重新充电,这就是"刷新"。
刷新的定义:由于动态存储器依靠栅电容存储信息,而电容容量有限且存在漏电,不能长期保存电荷。为了保证信息不丢失,需要以一定的时间间隔定期为电容补充电荷,这就是DRAM的刷新。
三种刷新周期安排方式:
刷新原因:"电容漏电"。三种方式:"集分异"。集中有死区但平时快;分散无死区但平时慢;异步是折中最常用。
第5章 -- 存储器层次结构。
IEEE754单精度浮点数的机器数为41A50000H,将其转换为十进制表示的实数。
IEEE 754单精度浮点数格式(32位):
IEEE 754标准规定了浮点数在计算机中的存储格式。单精度浮点数占32位(4字节),其结构如下:
| 字段 | 位数 | 位置 | 含义 |
|---|---|---|---|
| 符号位 s | 1位 | 第31位(最高位) | 0表示正数,1表示负数 |
| 阶码 E | 8位 | 第30~23位 | 采用移码表示,偏置值为127 |
| 尾数 f | 23位 | 第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位二进制数,逐位转换:
| 十六进制 | 4 | 1 | A | 5 | 0 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| 二进制 | 0100 | 0001 | 1010 | 0101 | 0000 | 0000 | 0000 | 0000 |
完整的32位二进制为:0100 0001 1010 0101 0000 0000 0000 0000
第二步:按IEEE 754格式划分各字段
将32位按 1-8-23 的结构划分:
| 字段 | 二进制值 | 位数 |
|---|---|---|
| 符号位 s | 0 | 1位 |
| 阶码 E | 10000011 | 8位 |
| 尾数 f | 010 0101 0000 0000 0000 0000 | 23位 |
对应关系如下(用竖线分隔):
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
第2章 - 数据的表示和运算。IEEE 754浮点数格式及其表示范围、浮点数与十进制之间的相互转换。
用8位二进制补码计算"-115-(-100)",结果用补码表示,并指出最后标志位SF、CF、OF和ZF分别是多少?
一、补码的概念
补码是计算机中表示有符号整数的最常用方式。对于8位补码:
二、补码减法转加法
补码运算的核心优势是:减法可转换为加法。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补) | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
| B(+100补) | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
| 进位 | 0← | 0← | 0← | 0← | 1← | 1← | 0← | 0← |
| 结果 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
详细计算过程(从低位到高位):
运算结果为: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 |
| SF | 1 |
| CF | 1 |
| OF | 0 |
| ZF | 0 |
第2章 - 数据的表示和运算。补码的表示与运算、定点数的加减运算、标志位(SF/CF/OF/ZF)的产生与含义。
一个高级语言程序被编译器编译生成可执行的指令序列,在时钟频率为1GHz的机器上运行,目标指令序列中用到的指令类型有A、B、C和D四类。四类指令在机器上的CPI和各类指令条数如下表所示。
| 指令类型 | A | B | C | D |
|---|---|---|---|---|
| 各类指令的CPI | 1 | 2 | 3 | 4 |
| 各类指令条数 | 4 | 5 | 2 | 3 |
该程序的CPI为多少?执行时间为多少ns?计算结果保留到小数点后1位。
一、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 × 条数 |
|---|---|---|---|
| A | 1 | 4 | 1 × 4 = 4 |
| B | 2 | 5 | 2 × 5 = 10 |
| C | 3 | 2 | 3 × 2 = 6 |
| D | 4 | 3 | 4 × 3 = 12 |
| 合计 | - | 14 | 32 |
总时钟周期数 = 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
最终答案:
| 指标 | 结果 |
|---|---|
| 程序的CPI | 2.3 |
| 执行时间 | 32.0ns |
第1章 - 计算机系统概述。计算机系统的性能指标,包括时钟频率、CPI、MIPS、CPU执行时间等概念及其计算方法。第4章 - 中央处理器部分也涉及指令执行周期的分析。
某计算机字长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) 各节拍的控制信号与功能:
| 节拍 | 控制信号 | 功能 | 数据流向 |
|---|---|---|---|
| 1 | R2out, MARin | MAR ← (R2) | R2 → 总线 → MAR |
| 2 | MemR | MDR ← M(MAR) | 内存 → MDR |
| 3 | R1out, Yin | Y ← (R1) | R1 → 总线 → Y |
| 4 | MDRout, SUB | Z ← Y - (MDR) | MDR → ALU的B端,Y提供A端,结果存Z |
| 5 | Zout, R1in | R1 ← (Z) | Z → 总线 → R1 |
为什么可以是4拍?节拍2(MemR读内存)和节拍3(R1送Y)可以并行,因为一个用内存数据总线,一个用CPU内部总线,互不冲突。
解题流程:取地址 → 访存取数 → 暂存操作数到Y → ALU运算 → 写回结果。单总线每拍一个源输出,ALU两操作数需一个先存Y。
第4章 -- 中央处理器。
假定主存与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)
(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章 -- 存储器层次结构。