Appearance
CPU的功能与基本结构
大纲定位
五(一)CPU 的功能和基本结构
要求:说清 CPU 由运算器和控制器两大部分构成,能指出 PC、IR、MAR、MDR、ACC、PSW 等寄存器各自的功能,并区分哪些对程序员可见。
考情分析
CPU 结构是第五章的地基。选择题的落点集中在各寄存器的功能与数据通路的连接关系上——典型问法是"某操作把数据写进哪个寄存器"。这类题不需要计算,全靠对部件职责的准确记忆。
CPU的功能
CPU负责控制程序执行,具体包括:
- 指令控制:按顺序取指、译码、执行
- 操作控制:向各功能部件发送控制信号
- 时间控制:控制各操作的时序关系
- 数据加工:对数据进行算术运算和逻辑运算
- 中断处理:响应并处理异常与外部中断
CPU的基本组成
运算器
执行算术运算和逻辑运算,主要部件:
| 部件 | 名称 | 功能 |
|---|---|---|
| ALU | 算术逻辑单元 | 执行加减法、与或非等操作 |
| ACC | 累加器 | 存放操作数和运算结果 |
| MQ | 乘商寄存器 | 乘除法时存放操作数/商 |
| X | 通用操作数寄存器 | 暂存参与运算的操作数 |
| PSW | 程序状态字寄存器 | 标志位(CF、ZF、SF、OF)由 ALU 运算产生;PSW 本身是 CPU 的状态寄存器,多数教材将其归入控制器一侧 |
控制器
解释指令、产生控制信号,主要部件:
| 部件 | 名称 | 功能 |
|---|---|---|
| PC | 程序计数器 | 存放下一条指令的地址,自动 +1(或 +指令字节数) |
| IR | 指令寄存器 | 存放当前正在执行的指令 |
| MAR | 存储器地址寄存器 | 存放要访问的存储器地址 |
| MDR | 存储器数据寄存器 | 存放从存储器读出或要写入存储器的数据 |
| CU | 控制单元 | 对 IR 中的操作码进行译码,产生各种控制信号 |

(唐朔飞《计算机组成原理》第 3 版,见文末教材出处)
图中把 CPU 拆成 ALU(含状态标志、移位、取反、算术和布尔逻辑)、寄存器组、CU 和中断系统四块,中间那条竖的就是 CPU 内部数据总线——本章后面所有微操作都在这条总线上发生。
内部寄存器详解
PC — 程序计数器
- 宽度 = 存储器地址位数(若指令按字边界对齐,可少几位,见下文"PC 和 IR 的位数")
- 顺序执行时,每取一条指令后自动递增
- 转移指令执行时,由指令给出新地址写入 PC
- 程序员可见(判定理由见下节)
IR — 指令寄存器
- 宽度 = 指令字长(不是机器字长,也不是地址位数)
- 存放当前指令,供 CU 译码
- 程序员不可见
哪些寄存器程序员可见
判定标准只有一条
汇编指令能不能直接读它、写它,或者通过指令的副作用改变它——能,就是可见;不能,就是 CPU 的内部脚手架,对程序员透明。
按这条标准,PC 是可见的:jmp、call、ret、条件分支这些指令的语义本质就是"改写 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 按字节编址 |
| IR | 指令字长 | 32 位定长指令字 |
| MAR | 存储器地址位数 | 同 PC 的基准 |
| MDR | 存储字长 | 与机器字长不一定相等 |
按边界对齐时 PC 可以省掉低位
如果指令按字边界对齐存放(32 位指令一律放在 4 的倍数地址上),那么指令地址的低 2 位恒为 0,PC 不必存这两位。
主存 4GB、按字节编址、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 由运算器负责更新,控制器读取用于条件判断
- 取指令时:
,同时
真题练习
相关真题(21题)
教材出处
- CPU 内部结构与部件划分(图 8.2):唐朔飞《计算机组成原理》第 3 版 §8.1 CPU 的结构,印刷页 p338