首先,一句话概括CPU是什么?
CPU(中央处理器)是计算机的“大脑”,其核心本质是通过执行二进制指令序列来处理数据和控制其他硬件。它通过一系列精密的电子电路和逻辑设计,完成从简单数学运算到复杂程序控制的所有任务。
简单概括CPU的工作流程?
CPU的工作可简化为 “取指-解码-执行-访存-写回” 的循环流程,称为 指令周期。
以执行 ADD R1, R2为例,下面列出了宏观图(注:cpu的取指和写回操作都是与RAM互相操作的)
+------------------+
| Memory (RAM) |
+------------------+
↑↓ Load/Store
+------------------+
| CPU |
| +------------+ |
| | Control | | ← 解码指令,生成控制信号
| +-----↑------+ |
| | |
PC → 取指 → IR → 解码 → ALU → 执行→ ALU_OUT→写回R1
| | |
| +-----↓------+ |
| | Registers | | ← 存储中间数据(如R1, R2)
| +------------+ |
上面只是宏观图,工作细节并没有体现出来,下面用文字详细讲解CPU内部工作原理如下:
CPU执行`ADD R1, R2`指令的过程涉及多个硬件单元的协同工作,其核心步骤和原理如下:
### 一、指令执行步骤分解
#### 1. **取指阶段(Fetch)**(也就是上图的 PC → 取指 → IR)
• **操作**:从内存中取出指令并加载到指令寄存器(IR)。
• **关键元件**:
• **程序计数器(PC)**:存储当前指令地址(假设为`0x1000`)。
• **存储器地址寄存器(MAR)**:接收PC的地址,发送到地址总线。
• **存储器数据寄存器(MDR)**:接收内存返回的指令数据。
• **数据总线(DBUS)**:传输指令数据。
• **流程**:
1. PC将地址`0x1000`发送至MAR。
2. 控制单元(CU)发出读信号,从内存地址`0x1000`读取指令`ADD R1, R2`到MDR。
3. MDR将指令写入IR,PC自动递增为`0x1004`(假设指令长度4字节)。
#### 2. **译码阶段(Decode)**(也就是上图的IR → 解码 → ALU)
• **操作**:解析指令的操作码和操作数。
• **关键元件**:
• **指令寄存器(IR)**:存储指令`ADD R1, R2`。
• **指令译码器(ID)**:解析操作码`ADD`,确定操作类型为加法。
• **流程**:
1. IR将指令拆分为操作码(`ADD`)和操作数(`R1`, `R2`)。
2. 译码器生成控制信号,通知ALU执行加法,并指定源寄存器和目标寄存器。
#### 3. **执行阶段(Execute)**(也就是上图的ALU → 执行)
• **操作**:ALU执行加法运算。
• **关键元件**:
• **算术逻辑单元(ALU)**:执行加法操作。
• **通用寄存器(R1, R2)**:提供操作数。
• **数据总线(DBUS)**:传输操作数到ALU。
• **流程**:
1. CU激活R1和R2的输出使能信号,将它们的值(假设`R1=100`, `R2=20`)传输到ALU输入端。
2. ALU执行`100 + 20 = 120`,结果暂存于ALU内部寄存器。
#### 4. **写回阶段(Write Back)**(也就是上图的执行→ ALU_OUT→写回R1)
- 控制单元激活R1的写使能
ALU_OUT
数据通过总线写入R1- 更新零标志(若结果为0)和溢出标志。
通过IF(取指)→ ID(译码)→ EX(执行)→ WB(写回)步骤,`ADD R1, R2`指令在CPU内部完成从取指到结果写入的全过程。