Skip to content

CPU 的功能和基本结构

2026 大纲 五(一)CPU 的功能和基本结构

CPU 里有哪些部件,是推出来的不是列出来的

打开任何一本教材,CPU 那一章都会先给你一张部件清单:PC、IR、MAR、MDR、ALU、CU、PSW……十来个缩写,看着就想背。但这张清单其实一条都不用背——每个部件都是某项功能的必要条件,从"CPU 要干什么"出发,一个一个都能推出来。

CPU 的功能有五项:指令控制(决定下一条执行哪条)、操作控制(产生每条指令所需的控制命令)、时间控制(控制这些命令何时发出、持续多久)、数据加工(算术与逻辑运算)、中断处理(响应异常与外部请求)。前三项都属于控制器,教材把控制器的功能进一步压成三个动作:取指令、分析指令、执行指令

下一节就用这三个动作把部件一个个推出来。整章真正需要单独记的只有一处例外:

🔴 MAR 与 MDR 不是从"指令怎么执行"推出来的,而是从"CPU 怎么跟主存打交道"推出来的。 总线上的地址与数据必须稳定保持到访存结束,而 CPU 内部的寄存器随时可能被改写,所以需要一对专用的锁存寄存器。两者都在 CPU 内部所有访存都经过它们(早期教材把它们画在主存一侧只是逻辑示意)。

本篇后面三节分别处理三类最常被考的判断:谁的位数等于什么、谁对程序员可见、谁属于数据通路。这三类题的共同特点是四个选项长得都像对的,靠感觉选必错,得有判据。

一、部件是怎么推出来的

CPU 的结构不必死记。从这三个动作出发,每个部件都是某项功能的必要条件

要做什么因此必须有部件
自动取指令一个专门存放当前指令地址的寄存器PC
分析指令一个存放当前指令的寄存器,和一个对操作码译码的部件IR + 指令译码器
执行指令一个能发出各种操作命令序列的部件CU
算术逻辑运算存放操作数的寄存器,和实现运算的部件通用寄存器 + ALU
处理异常和特殊请求一套检测与响应机制中断系统

MAR 与 MDR 不在这张表里,理由已在开篇说过——它们由访存需求推出,不由指令执行流程推出。

图 8.2 CPU 的内部结构
图 8.2 CPU 的内部结构
(唐朔飞《计算机组成原理》第 3 版,见文末教材出处)

图中间那条竖线是 CPU 内部数据总线——本章后面所有微操作都在这条总线上发生。

二、各寄存器的功能

部件名称功能
ALU算术逻辑单元执行加减法、与或非等操作
ACC累加器存放操作数和运算结果
MQ乘商寄存器乘除运算时存放乘数/商
X通用操作数寄存器暂存参与运算的操作数
PC程序计数器存放下一条指令的地址,顺序执行时自动递增
IR指令寄存器存放当前正在执行的指令
MAR存储器地址寄存器锁存要访问的存储器地址
MDR存储器数据寄存器锁存读出或待写入的数据
CU控制单元对 IR 中的操作码译码,产生控制信号
PSW程序状态字寄存器存放条件码与其他状态信息

前四行属运算器一侧,后六行属控制器一侧。PSW 中常见的四个标志位:CF 无符号运算产生进位/借位、ZF 结果为 0、SF 结果为负、OF 有符号运算溢出。

关于 PC 和 PSW 各有一条容易记混的:

⚠️ PSW 的产生者与使用者不是同一个部件。 条件码由 ALU 在运算时产生,供控制器在条件转移时读取判断。多数教材把它归入控制器的"控制和状态寄存器",但记这条产生—使用关系比记它归谁管用得多

🔴 PC 里存的是"下一条指令的地址",但取指周期开始的那一刻它装的是当前指令地址。 两种说法不矛盾——PC 送 MAR 之后立即自增,取指周期结束时它已经指向下一条。而自增必须在取指周期做:转移指令在执行周期改写 PC,自增若留到最后会把刚写进去的目标地址又加掉。先增后改还顺带带来一个便利——相对寻址的基准天然就是"下一条指令的地址"。

三、各寄存器的位数

宽度由各自不同的量决定,不能拿同一个数去套:PC 看能寻址到的指令地址范围(主存 4 GB 按字节编址就是 32 位);IR指令字长(32 位定长指令字就是 32 位);MAR 看存储器地址位数,它决定最大寻址空间;MDR存储字长(等于数据总线宽度),与机器字长不一定相等。

🔴 按字边界对齐时 PC 可以省掉低位。 32 位指令一律放在 4 的倍数地址上 低 2 位恒为 0、不携带信息。所以"主存 4 GB、按字节编址、32 位定长指令且按字边界对齐"时,PC=32log24=30 位而 IR=32 位。只有题面明确说了"按字边界对齐"才能省,否则按满位算。

🔴 三个"字长"是三个独立的量,别混:机器字长 = CPU 一次能处理的位数(也就是 ALU 的宽度);指令字长 = 一条指令占的位数(变长指令根本没有单一值);存储字长 = 一个存储单元的位数(也就是 MDR 的宽度)。三者可以互不相等,常见设计取整数倍只是为了简化寻址。

机器字长的定义是 CPU 一次能处理的二进制位数,因此哪些部件必须等于它也就定了:

部件一定等于机器字长?理由
ALU机器字长的定义就是 ALU 的宽度
通用寄存器要装得下 ALU 的操作数和结果
指令寄存器 IR等于指令字长,可与机器字长不等
浮点寄存器由浮点格式决定(32 位机上的双精度寄存器是 64 位)
MDR等于存储字长

四、哪些寄存器程序员可见

判据只有一条,不必逐个记:

🔴 汇编指令能不能直接读它、写它,或者通过指令的副作用改变它。 能,就是可见;不能,就是透明。

⚠️ PC 可见这一点最容易想反。 "不能用 MOV 随便读写"不等于"不可见"——jmp / call / ret / 条件分支的语义本质就是改写 PCcall 还会把 PC 压栈。条件码寄存器教材称"部分透明",因为它能被条件转移测试、部分标志位还有专门指令置复位;能被指令读到就算可见

程序员可见(属于 ISA)程序员透明(实现细节)
PC 程序计数器MAR 存储器地址寄存器
通用寄存器组(GPRs)MDR 存储器数据寄存器
PSW / 条件码寄存器IR 指令寄存器
栈指针 SP、基址寄存器、变址寄存器微指令寄存器、控制存储器
流水线段间锁存器、TLB、Cache 行

右边一列的共同点:它们的装入和使用全部由硬件在取指、译码、访存过程中自动完成,指令集里根本没有能碰到它们的指令。微指令寄存器还有一层——它属于控制器的一种实现方式,换成硬布线控制器它就不存在了,自然不可能进入指令集架构。

五、数据通路的两类元件

类别别名特点包括
操作元件组合逻辑元件输出只由当前输入决定,不存储状态,无需时钟ALU多路选择器 MUX、加法器、译码器、扩展器
状态元件时序逻辑元件保存状态,由时钟边沿更新PC通用寄存器组、各类寄存器、存储器

判别方法:撤掉输入后它还记不记得东西。ALU 撤掉输入立刻失忆,是操作元件;PC 会一直记着地址等下一个时钟沿,是状态元件。

数据通路的边界还有一条最常被拿来出判断题的:

🔴 数据通路里有异常事件的检测电路,但没有产生控制信号的控制部件。 溢出、地址越界、缺页这些信号都是从运算与访存的路径上引出来的,所以检测电路在数据通路之内;而控制信号是从控制器送进数据通路的,控制部件本身不属于数据通路。分工很清楚:数据通路负责"数据往哪走、怎么算",控制器负责"什么时候走、走哪条"

考点速记

  1. CPU 的部件可以从功能推出来:取指 PC,分析 IR + 译码器,执行 CU,运算 ALU + 寄存器,异常 中断系统;MAR / MDR 则由访存需求推出,两者都在 CPU 内部。
  2. 位数各看各的量:PC 看地址范围(按字边界对齐可省低位)、IR 看指令字长、MDR 看存储字长只有 ALU 与通用寄存器一定等于机器字长
  3. 可见性判据是"指令能否读写或改变它":PC、通用寄存器、PSW、基址寄存器、变址寄存器可见,MAR、MDR、IR、微指令寄存器透明。数据通路 = 操作元件 + 状态元件,含异常检测电路但不含控制部件

这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那几道):

  • 问哪些寄存器 / 存储器对汇编语言程序员可见:用"指令能否读写或改变它"这一条筛。PC 可见(转移与调用指令的语义就是改写它)、基址寄存器与标志状态寄存器可见;IR、MAR、MDR、微指令寄存器透明
  • 问哪些部件的位数一定与机器字长相同:只有 ALU 与通用寄存器。指令寄存器等于指令字长、浮点寄存器由浮点格式定、MDR 等于存储字长,三者都不一定。
  • 给主存容量、编址方式与指令格式,问 PC 和 IR 的位数至少是多少:IR = 指令字长;PC 看地址范围,题面说了"按字边界对齐"才减掉低位(4 GB 按字节编址 + 32 位对齐指令 30 位与 32 位)。
  • 问数据通路包含 / 不包含什么:包含 ALU 这类组合逻辑元件、寄存器这类时序逻辑元件、以及异常事件的检测电路不包含生成控制信号的控制部件。这两句正反都被考过。
  • 给一组元件问哪些属于操作元件(组合逻辑)ALU 与多路选择器 MUX 是;PC 与通用寄存器组会保存状态,属状态元件。
  • 挑关于数据通路与控制器的错误叙述:常设的错点是"通用寄存器组中应该包含程序计数器"——PC 不在通用寄存器组里,它是独立的专用寄存器。
  • 给一条指令的功能与寻址方式,问取数及执行过程中用到哪些部件:注意问的是"取数及执行"这两个阶段——指令译码器在译码阶段就用完了,不算在内;寄存器间接寻址要访存,所以存储器算在内。

易错:把 PC 判成"程序员不可见"。转移、调用、返回指令的语义本质就是改写 PC。

易错:不看"按字边界对齐"这个前提就给 PC 减位。没这句话时按满位算。

易错:把控制部件算进数据通路,或把异常检测电路排除在数据通路之外。两处方向正好相反。

易错:把 PC 当成通用寄存器组的一员。

易错:问"取数及执行阶段用到哪些部件"时把指令译码器算进去。它属于译码阶段。

教材出处
  • CPU 的功能、四大组成部分与内部结构(图 8.1、图 8.2):唐朔飞《计算机组成原理》第 3 版 §8.1 CPU 的结构,印刷页 p337–p338
  • 用户可见寄存器的四种分类、条件码寄存器"部分透明"的表述:同上,印刷页 p339
  • MDR 与 IR 在取指过程中的关系:同上,印刷页 p340

相关知识

指令执行过程单周期数据通路

真题练习