01CPU 执行的到底是什么?

我们写程序时,可能看到的是 C++、Python 或其他高级语言。 但 CPU 最终执行的不是这些文字,而是机器指令(Machine Instruction)

每条机器指令都会告诉处理器做一种比较明确的事情, 例如:读取数据、相加、比较、跳转、把结果写回某个位置。

计算

加、减、位运算等

搬运数据

在寄存器和内存之间移动数据

比较

判断两个值的关系

跳转

决定下一步去执行哪里

02CPU 怎样知道下一条指令在哪里?

CPU 内部会保存“接下来应该从哪里取指令”的信息。 这个位置通常由一个特殊寄存器表示,常叫 程序计数器(Program Counter,PC); 在不同处理器架构里,它也可能有不同名字。

程序中的机器指令

地址 100指令 A
地址 104指令 B
地址 108指令 C
地址 112指令 D

程序计数器 PC

104

指向下一条要取的指令位置

03取指、译码、执行是什么意思?

入门时,我们常用 取指(Fetch)→ 译码(Decode)→ 执行(Execute) 来理解 CPU 的基本工作循环。

1

取指 Fetch

根据指令地址取得要执行的机器指令

2

译码 Decode

判断这条指令要做什么、需要哪些操作数

3

执行 Execute

由对应执行单元完成计算、访问数据或跳转等操作

4

写回 / 完成结果

把需要保留的结果写入寄存器或内存等位置

04寄存器和缓存为什么重要?

CPU 的速度远高于主内存。 如果每做一次小计算都要直接等待 RAM,就会浪费很多时间。

所以 CPU 内部和附近会使用更快的存储层次: 寄存器 → CPU 缓存 → RAM → SSD / 硬盘

寄存器

直接位于处理器内部,保存当前计算最常用的小量数据

CPU 缓存

保存近期常用的指令和数据

RAM

容量更大,速度比缓存慢

SSD 或硬盘

SSD / 硬盘

长期保存,容量大,但延迟更高

05遇到 if 和循环时会发生什么?

程序并不是永远从上到下一条直线走到底。 ifforwhile、函数调用等, 最终都会让 CPU 遇到跳转或分支相关的机器指令

比较条件

例如:x 是否大于 10?

→ 执行路线 A
→ 执行路线 B

循环的本质之一,就是让程序在满足某些条件时, 跳回前面的某个指令位置继续执行。

06现代 CPU 真的是一条一条慢慢做吗?

如果只看入门模型,很容易以为 CPU 完整做完一条指令后, 才开始下一条。 现代高性能 CPU 通常不是这么简单。

流水线

不同指令可以同时处在取指、译码、执行等不同阶段

乱序执行

在不破坏程序可观察结果的前提下,处理器可以先做已经准备好的工作

分支预测

提前猜测程序可能走哪条分支,减少等待

超标量执行

某些 CPU 每个时钟周期可以发射或完成多条独立操作

07用一个小例子串起来

假设程序要完成: 先计算 3 + 5,如果结果大于 6,就把结果保存下来。

result = 3 + 5; if (result > 6) { save(result); }
1

取得相关机器指令

PC 指向下一条要处理的指令

2

取到数据 3 和 5

可能来自寄存器、缓存或更低层存储

3

执行加法

得到结果 8

4

比较 8 和 6

得到“8 大于 6”的条件结果

5

改变执行路线

进入保存结果的那部分代码

你已经知道了什么

  • CPU 最终执行的是机器指令,而不是直接执行 C++ 源代码。
  • 程序计数器等机制帮助处理器确定接下来从哪里取得指令。
  • “取指 → 译码 → 执行”是理解 CPU 工作的经典入门模型。
  • 执行过程中,CPU 会大量使用寄存器和缓存,而不是每次都直接访问 RAM。
  • if、循环和函数调用最终都会影响程序接下来执行哪一段机器指令。
  • CPU 不会“思考”,它只是按照指令和数据改变自己的状态并产生结果。
  • 现代 CPU 会使用流水线、乱序执行、分支预测和超标量等技术提高效率。
  • 真实 CPU 的内部实现比教学模型复杂,不同处理器架构也会有所不同。

下一个问题: 如果 CPU 同一时间只有有限的核心, 为什么我们却可以一边听音乐、一边浏览网页、还开着聊天软件? 下一篇:为什么电脑可以同时运行很多程序?