中央处理器的英文缩写为CPU,它是计算机系统的核心。CPU负责控制计算机各部件协调工作,并处理信息处理过程中出现的异常情况。CPU上电复位后,便进入了一个取指、译码和执行指令的循环。在第一章关于计算机基本工作原理的课程中,我们通过一个例子向同学们简要介绍了CPU的这一工作过程。在学习完本课程的前五章后,大家已经具备了深入学习CPU相关知识的能力。
接下来,我们将首先介绍CPU应实现的主要功能,这包括程序控制、操作控制、时序控制以及异常和中断处理四个方面。程序控制主要是控制程序执行的顺序。通过之前相关章节的学习我们知道通常情况下程序中的指令是按存储顺序自动执行。但遇到分支指令且分支条件满足,或者遇到跳转指令,则会改变程序的执行顺序。因此,CPU必须能够准确地获取下一条指令的地址。
操作控制涉及产生执行过程中所需的若干操作控制信号,以确保相关部件按照指令规定正确运行。持续控制涉及精确控制每个操作控制信号的开始时刻和持续时长,以确保各操作按预定时序执行。异常和中断处理是指当系统遇到内部异常或外部中断请求时,CPU应暂停当前程序的执行,并进行相应的异常或中断处理。处理完成后,系统会返回中断点,继续执行程序。常见的内部异常包括未定义指令、整数除零和缺页等,而中断请求通常由外部设备产生。
实现CPU的四个主要功能的实现与CPU的结构密切相关,而这些功能的实现都需要相应的硬件支持。在第一章关于计算机硬件的课程中,我们已经向同学们简单介绍了CPU的组成。由于本章将对CPU进行更深入的学习,因此接下来我们将对CPU的组成进行更详细的探讨。CPU的基本组成可以分为两大部分:控制器和运算器。控制器的主要功能包括取指令、计算下一条指令的地址、对指令进行译码、生成指令对应的微操作控制信号序列、控制指令的执行步骤和数据流动方向。这些功能的实现都需要相关硬件的支持。通过之前的课程和习题,同学们对程序计数器PC、存储器地址寄存器MAR、存储器数据寄存器MDR以及指令寄存器IR应该并不陌生。接下来,我们将简单介绍其他三个相关部件。
我们知道构成程序的指令和数据位于主存中,CPU内的存储器地址寄存器MAR通常用来存放CPU要访问的主存单元的地址。无论CPU是读取指令还是存取数据,都需要先将要访问的主存单元的地址送入MAR,进而通过主存地址总线告知主存,直到访存操作结束。因此,MAR的位宽与主存地址总线的位宽相同。需要指出的是,MAR并非是必须的,某些计算机系统可以直接将主存地址送到地址总线上来实现访存。CPU内的存储器数据寄存器MDR通常用来存放写入主存的数据或者从主存中读出的数据,其位宽通常与机器字长相同,MDR与主存之间通过主存数据总线传输数据。需要指出的是,MDR也不是必须的,这取决于具体的CPU结构。
若从主存读取的数据为指令,则该指令会被存放在指令寄存器IR中。因此,IR的位宽与指令字长相同。指令中的地址码会被送入地址生成逻辑部件,通过该部件对操作数寻址方式进行译码,进而生成操作数的相关地址。根据寻址方式的不同,操作数的相关地址会被送入程序计数器PC或存储器地址寄存器MAR。对于立即寻址方式,该部件生成的操作数本身会被送入运算部件。
需要指出的是,某些架构的计算机需要将操作码和地址码一同送入地址生成逻辑部件,以确定地址码的作用。指令中的操作码和地址码随后会被一起送入指令译码器,解码成多个指令译码信号。请同学们注意,同一时刻仅有一个指令译码信号有效,用以唯一表示一条指令。这一点与我们在第四章中介绍的用于地址译码的译码结构具有相同的特点,该部分内容曾向同学们阐述过地址译码器的译码输出信号的特性。
操作控制器接收指令译码器发出的译码信号,并根据测试条件和状态信息,通过时序发生器生成具有严格时间顺序的操作控制信号序列,即微操作控制信号。这些信号被传输到计算机各功能部件的控制端,例如运算器内的相关部件。我们暂时还未详细说明如何利用这些控制信号序列来确保各功能部件按照指令要求顺序执行动作,从而实现指令的功能。通过之前的学习我们知道,CPU在取指令时,会使用程序计数器PC的值作为访问主存的地址,并将其送入主存地址寄存器MAR中,以便从主存中读取指令。值得注意的是,一些没有MAR的CPU会直接将PC中的主存地址送到地址总线上,因此PC的位宽与主存地址总线的位宽是相同的。在完成取指令后,还需要修改PC的值,以形成下一条指令的地址。
程序顺序执行时,PC的值会递增,值得注意的是,这实际上是加上指令字长,即指令包含的字节数。在解答习题或考试时,我们必须根据题目描述,例如存储空间是按字节还是按存储字编制的,指令字长是多少,以及指令是否按边界对齐等因素,来确定每次递增的具体数值。对于现场指令系统中的指令,需要经过译码后才能确定PC值应增加多少。在程序顺序执行的分支跳转处,PC的值需要根据分支指令提供的目标地址进行修改,以形成跳转后的新的指令地址。

至此,我们已经介绍了构成CPU控制器的主要部件及其功能,以及它们之间的关系。接下来,我们将探讨CPU中的运算器。在控制器的指令控制下,运算器主要负责算术运算、逻辑运算和数据测试。完成这些任务需要硬件的支持。通过之前的课程,我们知道算术逻辑单元ALU是运算器的核心,参与运算的操作数通过多路选择器被选入ALU。我们曾在第五章学习过指令中操作数的寻址方式,操作数可能来自存储器数据寄存器MDR,即主存,也可能来自通用寄存器组中的通用寄存器。
多路选择器在控制器产生的相关控制信号的控制下,选择相应操作数送入算术逻辑单元(ALU)。ALU根据控制器的控制信号执行相应的运算。运算结果会根据寻址方式送入通用寄存器组中的通用寄存器或存储器数据寄存器(MDR),进而送入储存。当然了,通用寄存器组中的通用寄存器的内容也可通过MDR送入储存。通过我们之前的学习不难发现,通用寄存器具有多种用途。例如可作为变址寄存器、基址寄存器、地址指针寄存器(累加器)、数据缓冲器等,用于存放各种地址信息、操作数、中间结果等。
除了运算结果,算术逻辑单元(ALU)还会生成多种状态标志,包括算术运算指令、逻辑运算指令和测试指令执行后的条件标志。例如,溢出标志OF表示结果的符号位是否溢出,进位标志CF表示运算结果是否产生进位,零标志ZF表示结果是否为零等。我们在第五章关于特定操作类型的讨论中已经多次练习了这些条件标志,相信大家对此已不陌生。这些条件标志会被送入程序状态字寄存器PSW。通常情况下,条件分支指令会依据PSW的值来决定是顺序执行还是转移执行。此外,PSW还用于存储中断和系统工作状态信息,这些信息被送入操作控制器。另外,I/O状态也被送入操作控制器,以便CPU能及时了解计算机的运行状态并进行相应控制。至此,我们向同学们介绍了一种非常简单的CPU的基本组成。
需要指出的是,CPU除了包含基本部件外,还具有高速缓冲存储器(Cache)存储、企业管理单元、MMU浮点运算器等部件。此外,CPU内部包含哪些寄存器与具体的处理器架构、指令集、实现方法等密切相关。请同学们注意,控制器中的存储器地址寄存器MAR、存储器数据寄存器MDR和指令寄存器IR是不可见的,这些寄存器由控制器内部使用,用于控制指令的执行。而程序计数器PC是可见的,运算器中的程序状态字寄存器PSW和通用寄存器组也是用户可见的。这里的用户通常指的是汇编语言程序员,而用户可见的寄存器在进行汇编语言程序设计时可以直接使用。
至此,我们对中央处理器CPU进行了概述。本章将深入探讨本课程涉及的主要内容。接下来,请同学们尝试解答两道相关的408考研真题。首先,请暂停视频,思考2010年试题的第一题,并给出你的答案。
答案是B,同学们应能正确解答。我们不再赘述,现在挑战2016年的提示,请同学们暂停视频,动手练习并给出你的答案。
本题答案为选项B,大家是否都选对了?我们来一起分析一下。根据题目给出的指令,按边界对其存放。由此可知,题目给出的字长为32位,实际上指的是存储字长。
我们画出主存的示意图,每一行为一个存储字,存储字长为32位,即四字节。题目给出的存储空间为4G字节,并按字节进行编制。在图中标出的储存空间可以表示为2的32次方个字节,因此,我们需要用32个二进制位为每个字节单元编址。例如,这是该字节单元的地址,我们用16进制表示这是下一个字节单元的地址,以此类推。为了简化表述,通常我们只需标识每个存储字的第一个字节单元的地址即可,如图所示。
题目给出的指令字格式为32位,即四字节字长,并且要求按照边界对齐存放。请同学们思考,如果某条指令在主存中按此方式存放,是否符合边界对齐的要求?相信大家能够正确指出,如果不按边界对齐,那么将导致需要进行两次访存才能完整取出该指令。若按边界对齐存放,则只需一次访存即可取出该指令。
接下来,请同学们思考一下,假设我们可以为主存中的每个存储字编上地址,这是该存储字的地址,这是下一个存储字的地址。那么最后这个存储字的地址是多少呢?我们来一起分析。如果我们知道存储字的数量,我们就可以计算出需要使用多少个二进制位来为主存中的存储字进行编码,并进一步确定最后一个存储字的地址。
从示意图中可以清晰看出,通过用存储空间的大小除以存储字长,即可计算出主存中所包含的存储字数量。已知的存储空间大小为4GB,存储字长为32位,即四字节。据此,我们可以得知主存包含的存储字数量为1GB,可表示为2的30次方。因此,需要使用30个二进制位来为存储字进行编码。对于最后一个存储字,其地址应为全1的30位地址,这是其16进制形式。由此,我们可以确定程序计数器PC的位数至少为30位。当PC的30位为全1时,它指向首个存储字。完成对该存储器中指令的读取后,PC的值自动加1,以便指向下一个存储字,从而取出下一条指令到指令寄存器IR。由于指令字长为32位,因此指令寄存器IR的长度至少为32位。
综上所述,本题答案为选项B。可能有同学会产生疑问,题目给出的是按字节编制,但高老师怎么将其改为按存储字进行编制来解题呢?仔细分析会发现,实际上高老师并没有改变题目给出的按字节编制的条件,只是从不同的角度推导出求解PC至少需要多少位。可以认为仍然在按字节编制下,每次PC加1都是以四字节为单位。若有些同学仍有困惑,回到按字节编址的情况,将每个存储字的首个字节单元地址的最低一位16进制数写成四位二进制数,可以发现最低两位始终为零。因此,PC的位数实际上不需要32位,最少30位即可。