1.2 · Fetch–Decode–Execute 循环
目标: 描述机器循环每一步以及每个寄存器与总线的角色。
三句话讲循环
- 从内存**取出(Fetch)**下一条指令。
- **解码(Decode)**它的含义。
- **执行(Execute)**它。
…循环数十亿次每秒,直到关机。
详尽步骤
下面是经典逐步。背顺序、涉及的寄存器、用的总线。
| # | 步骤 | 涉及寄存器 / 单元 | 总线 |
|---|---|---|---|
| 1 | PC 的值复制到 MAR。 | PC → MAR | — |
| 2 | MAR 中的地址送到内存。 | MAR | 地址总线 |
| 3 | 内存回送该地址的指令;进入 MDR。 | Memory → MDR | 数据总线 |
| 4 | MDR 的内容复制到 IR。 | MDR → IR | — |
| 5 | PC 递增,指向下一条指令。 | PC = PC + 1 | — |
| 6 | 控制单元解码 IR 中的指令。 | CU | — |
| 7 | 如需操作数,对每个操作数重复 1–4。 | — | 地址 / 数据 |
| 8 | ALU 执行操作;结果放到 ACC 或其他寄存器。 | ALU → ACC | — |
| 9 | 状态寄存器(零、进位、溢出)被更新。 | 状态寄存器 | — |
| 10 | 若指令要写内存,载入 MAR & MDR 并发写信号。 | MAR/MDR | 地址 / 数据 / 控制 |
| 11 | 从第 1 步循环。 | — | — |
三条总线
| 总线 | 携带 | 方向 |
|---|---|---|
| 地址总线 | 被访问的地址 | CPU → 内存(单向) |
| 数据总线 | 实际数据 | 双向 |
| 控制总线 | 读、写、中断等信号 | 双向 |
实例 · 两数相加
设内存内容:
地址 内容
0 LOAD 5 ; 把地址 5 的值加载到 ACC
1 ADD 6 ; 把地址 6 的值加到 ACC
2 STORE 7 ; 把 ACC 存到地址 7
5 10
6 20
7 ?1
2
3
4
5
6
7
2
3
4
5
6
7
逐循环(压缩版):
| 循环 | 动作 |
|---|---|
| 1 | 取 LOAD 5。从地址 5 读 10 到 ACC。ACC = 10 |
| 2 | 取 ADD 6。从地址 6 读 20,加到 ACC。ACC = 30 |
| 3 | 取 STORE 7。把 ACC(30)写到地址 7。地址 7 现为 30 |
三个循环后,地址 7 持有结果之和。
循环为何在现实中重要
- 时钟更快 → 每秒更多循环 → 更多工作。
- 总线更宽 → 每次传输更多数据 → 大数据少用循环。
- 寄存器更多 → 少读内存 → 不浪费时间等慢 RAM。
常见误解
- 「每条指令耗一个循环。」现代 CPU 流水线一次执行多条指令,但概念循环仍是 HKEAA 用的模型。
- 「数据总线只搬一字节。」总线宽度多变:8、16、32、64 位。
- 「内存和 CPU 是同一颗芯片。」现代芯片上 L1/L2 cache 在 CPU die 上,但主 RAM 独立。
考试式题目
题(5 分): 概述 fetch–decode–execute 循环各步,识别 PC、IR、MAR、MDR 和系统总线的角色。
参考答案:
- 程序计数器 (PC) 保存下一条指令的地址。
- PC 的值复制到 MAR,放到地址总线上以指明要读的内存位置。
- 内存透过数据总线回送指令到 MDR。
- MDR 的内容复制到 IR 以备解码。
- PC 递增指向下一条指令。
- 控制单元解码 IR 中的指令。
- ALU 执行操作;结果可放 ACC 或经 MAR / MDR 写回内存。
控制总线承载协调每步的读 / 写信号。
关键要点
- Fetch → Decode → Execute,重复。
- 五个寄存器:PC、IR、MAR、MDR、ACC。
- 三条总线:地址、数据、控制。
- 速度 = 时钟 × 每周期指令数,由总线宽度与内存时延调节。
➡️ 下一节:1.3 内存类型