精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

CPU的功能与基本结构

大纲定位

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

要求:说清 CPU 由运算器和控制器两大部分构成,能指出 PC、IR、MAR、MDR、ACC、PSW 等寄存器各自的功能,并区分哪些对程序员可见。

考情分析

CPU 结构是第五章的地基。选择题的落点集中在各寄存器的功能与数据通路的连接关系上——典型问法是"某操作把数据写进哪个寄存器"。这类题不需要计算,全靠对部件职责的准确记忆。

CPU的功能

CPU负责控制程序执行,具体包括:

  • 指令控制:按顺序取指、译码、执行
  • 操作控制:向各功能部件发送控制信号
  • 时间控制:控制各操作的时序关系
  • 数据加工:对数据进行算术运算和逻辑运算
  • 中断处理:响应并处理异常与外部中断

CPU的基本组成

CPU=运算器(ALU)+控制器(CU)

运算器

执行算术运算和逻辑运算,主要部件:

部件名称功能
ALU算术逻辑单元执行加减法、与或非等操作
ACC累加器存放操作数和运算结果
MQ乘商寄存器乘除法时存放操作数/商
X通用操作数寄存器暂存参与运算的操作数
PSW程序状态字寄存器标志位(CF、ZF、SF、OF)由 ALU 运算产生;PSW 本身是 CPU 的状态寄存器,多数教材将其归入控制器一侧

控制器

解释指令、产生控制信号,主要部件:

部件名称功能
PC程序计数器存放下一条指令的地址,自动 +1(或 +指令字节数)
IR指令寄存器存放当前正在执行的指令
MAR存储器地址寄存器存放要访问的存储器地址
MDR存储器数据寄存器存放从存储器读出或要写入存储器的数据
CU控制单元对 IR 中的操作码进行译码,产生各种控制信号
图 8.2 CPU 的内部结构
图 8.2 CPU 的内部结构
(唐朔飞《计算机组成原理》第 3 版,见文末教材出处)

图中把 CPU 拆成 ALU(含状态标志、移位、取反、算术和布尔逻辑)、寄存器组、CU 和中断系统四块,中间那条竖的就是 CPU 内部数据总线——本章后面所有微操作都在这条总线上发生。

内部寄存器详解

PC — 程序计数器

  • 宽度 = 存储器地址位数(若指令按字边界对齐,可少几位,见下文"PC 和 IR 的位数")
  • 顺序执行时,每取一条指令后自动递增
  • 转移指令执行时,由指令给出新地址写入 PC
  • 程序员可见(判定理由见下节)

IR — 指令寄存器

  • 宽度 = 指令字长(不是机器字长,也不是地址位数)
  • 存放当前指令,供 CU 译码
  • 程序员不可见

哪些寄存器程序员可见

判定标准只有一条

汇编指令能不能直接读它、写它,或者通过指令的副作用改变它——能,就是可见;不能,就是 CPU 的内部脚手架,对程序员透明。

按这条标准,PC 是可见的jmpcallret、条件分支这些指令的语义本质就是"改写 PC"。即使 ISA 里没有 MOV PC, xxx 这种写法,程序员依然能感知并控制它。

这一点很容易想反——PC 确实不能像通用寄存器那样随便读写,但"不能随便读写"不等于"不可见"。考试口径:PC 可见。

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

右边一列的共同点:它们的装入和使用全部由硬件在取指/访存/译码周期里自动完成,指令集里根本没有能碰到它们的指令。MAR/MDR 是访存的中转站,IR 是取指的落点,微指令寄存器属于控制器实现——换一种控制器实现方式它就不存在了,自然不可能进 ISA。

PC 和 IR 的位数

两者的宽度由完全不同的量决定,别用同一个数:

寄存器宽度取决于常见取值
PC能寻址到的指令地址范围主存 4GB 按字节编址 32 位
IR指令字长32 位定长指令字 32 位
MAR存储器地址位数同 PC 的基准
MDR存储字长与机器字长不一定相等

按边界对齐时 PC 可以省掉低位

如果指令按字边界对齐存放(32 位指令一律放在 4 的倍数地址上),那么指令地址的低 2 位恒为 0,PC 不必存这两位。

主存 4GB、按字节编址、32 位定长指令字、指令按字边界对齐

PC 位数=32log24=30 ,IR 位数=32 

题面出现"按字边界对齐"五个字,就是在提示你减这几位。没有这句话则按满位算。

数据通路的两类元件

数据通路由两类元件搭成,这个分类本身就是考点:

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

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

数据通路里到底有什么、没有什么

  • :ALU、MUX 等操作元件 ✓;PC、寄存器组等状态元件 ✓;异常事件的检测电路 ✓(溢出、地址越界这些信号就是从数据通路里引出来的)
  • 没有生成控制信号的控制部件(那是控制器 CU 的活)

数据通路负责"数据往哪走、怎么算",控制器负责"什么时候走、走哪条"。控制信号是从控制器送进数据通路的,不是数据通路自己产生的。所以"指令流水线数据通路包含生成控制信号的控制部件"是错误说法。

反过来,"数据通路不包含异常事件检测及响应的电路"也是错误的——溢出标志、缺页信号正是在数据通路的运算和访存路径上被检测出来的。

位数与机器字长的关系

问"哪些部件的位数一定与机器字长相同"时,逐个过:

部件一定等于机器字长?为什么
ALU机器字长的定义就是 CPU 一次能处理的二进制位数,ALU 的宽度就是这个数
通用寄存器要装下 ALU 的操作数和结果
指令寄存器 IR等于指令字长,可以与机器字长不等(如 16 位机用 32 位指令)
浮点寄存器由浮点格式决定(32 位机上的 double 寄存器是 64 位)
MDR等于存储字长

MAR — 存储器地址寄存器

  • 宽度 = 存储器地址位数,决定最大寻址空间
  • 每次访问内存前,先将地址送入 MAR
  • CPU 内部的寄存器,不是主存的一部分

MDR — 存储器数据寄存器

  • 宽度 = 存储字长(即数据总线宽度;注意存储字长不一定等于机器字长,408 标准表述是"MDR 位数 = 存储字长")
  • 读内存:数据先送到 MDR,再传给 CPU 内部其他寄存器
  • 写内存:CPU 先将数据写入 MDR,再由 MDR 写入内存

PSW — 程序状态字寄存器

常见标志位:

标志含义
CF(进位标志)无符号运算产生进/借位
ZF(零标志)运算结果为 0
SF(符号标志)运算结果为负
OF(溢出标志)有符号运算溢出

数据通路

CPU 内部数据通路是寄存器与运算部件之间传送数据的路径。

  PC ──→ MAR ──→ 地址总线 ──→ 主存

  IR ←── MDR ←── 数据总线 ←──┘

  CU ──→ 控制信号 ──→ ALU、各寄存器

  ACC ←─────────────── ALU 运算结果

数据通路的实现方式:

  • CPU 内部单总线:所有寄存器连到一条内部总线,简单但同一时刻只能传一个数据
  • CPU 内部多总线:多条内部总线并行传输,提高效率
  • 专用数据通路:部件间专用连线,速度最快但电路复杂

考点清单

  • CPU = 运算器 + 控制器,MAR 和 MDR 在 CPU 内部(不在主存中)
  • PC 存放下条指令地址;IR 存放当前指令
  • PC、通用寄存器、PSW、基址寄存器程序员可见;MAR、MDR、IR、微指令寄存器透明
  • PC 位数看地址范围(按字边界对齐可省低位),IR 位数看指令字长,两者可以不等
  • ALU 和通用寄存器的位数一定等于机器字长;IR、浮点寄存器、MDR 不一定
  • 数据通路 = 操作元件(ALU、MUX,组合逻辑)+ 状态元件(PC、寄存器组,时序逻辑)
  • 数据通路包含异常检测电路,不包含产生控制信号的控制部件
  • PSW 由运算器负责更新,控制器读取用于条件判断
  • 取指令时:PCMAR主存MDRIR,同时 PC+1

真题练习

教材出处

  • CPU 内部结构与部件划分(图 8.2):唐朔飞《计算机组成原理》第 3 版 §8.1 CPU 的结构,印刷页 p338