欢迎来到计算机的心脏!

你好!在本章中,我们要深入计算机内部,一探它的“大脑”——中央处理器 (Central Processing Unit, CPU)。如果刚开始听起来像科幻小说,别担心。你可以把处理器想象成厨房里一位速度极快、非常听话的厨师。一旦你理解了这位厨师的工作方式,整台计算机的运行逻辑就变得清晰易懂了!

1. CPU 架构:基本蓝图

大多数现代计算机都遵循冯·诺依曼架构 (Von Neumann Model)。这个架构之所以闻名,是因为它采用了存储程序概念 (Stored Program Concept)。这简单来说,就是指令(“食谱”)和数据(“食材”)都存储在同一个内存中。

核心组件(CPU 团队)

算术逻辑单元 (Arithmetic and Logic Unit, ALU): 这是计算器。它负责处理所有数学运算(例如 \( 2 + 2 \))和逻辑比较(例如A 是否大于 B?)。
控制单元 (Control Unit, CU): “经理”。它负责协调 CPU 的所有活动,并发送信号指示其他部分执行动作。
系统时钟 (System Clock): 就像心跳一样。它会发出脉冲信号,让所有运行保持同步。
即时存取存储器 (Immediate Access Store, IAS): 这是内存的另一个名称,指 CPU 可直接存取、存放当前所需数据和指令的地方。

寄存器 (Registers)(CPU 的“便利贴”)

寄存器是 CPU 内部极小且速度极快的存储区域。当 CPU 正在处理信息时,它们会暂时存放这些信息。

你需要知道的特殊用途寄存器:
程序计数器 (Program Counter, PC): 存放下一个要提取的指令的内存地址
内存地址寄存器 (Memory Address Register, MAR): 存放目前正在读取或写入的内存位置的地址
内存数据寄存器 (Memory Data Register, MDR): 存放刚从内存读取,或即将写入内存的实际数据
现行指令寄存器 (Current Instruction Register, CIR): 存放当前正在解码和执行的指令。
累加器 (Accumulator, ACC): 一个通用寄存器,用于存储 ALU 的计算结果。
变址寄存器 (Index Register, IX): 用于“变址寻址”(我们之后会学到!)。
状态寄存器 (Status Register): 包含用来标示特定条件的“标志位”(bits),例如计算结果是否为负数或发生溢出错误。

记忆小撇步:PC 想象成书中的“下一页”书签,而 ACC 则是你的“工作桌”,上面放着你当前计算出的答案。

总线 (Buses)(高速公路)

信息通过“总线”在各组件之间传输。
地址总线 (Address Bus): 传输数据的目的地或来源地址。它是单向的 (unidirectional)(只能从 CPU 到内存)。
数据总线 (Data Bus): 传输实际的数据。它是双向的 (bidirectional)
控制总线 (Control Bus): 传输来自控制单元的信号(例如“读取”或“写入”)。它也是双向的

快速复习: 地址总线是唯一一个单向的!这是非常常见的考题。

影响性能的因素

为什么有些计算机比其他计算机快?
1. 时钟速度 (Clock Speed): 每秒的“脉冲”越多,处理的指令就越多。
2. 总线宽度 (Bus Width): 较宽的数据总线可以一次传输更多位元(就像在高速公路上增加车道)。
3. 核心数量 (Number of Cores): 核心越多,CPU 就能同时处理更多任务。
4. 高速缓存 (Cache Memory): CPU 内部的超高速存储器。它存储频繁使用的数据,让 CPU 不必等待较慢的主内存 (RAM)。

重点总结: CPU 在冯·诺依曼架构下,使用寄存器来保存数据,使用总线来传输数据,并由控制单元来进行全盘管理。

2. 提取-执行 (F-E) 周期

这是计算机的“心跳”。这个周期每秒重复数十亿次。

寄存器传输符号表示法 (Register Transfer Notation)

我们使用特殊的简写来表示数据如何移动。[PC] 表示“PC 中的内容”,箭头 表示“移动到”。

提取阶段 (Fetch Stage):

1. MAR ← [PC] (将 PC 中的地址复制到 MAR)。
2. PC ← [PC] + 1 (PC 加 1,指向下一条指令)。
3. MDR ← [[MAR]] (将 MAR 指定地址内的数据载入 MDR)。
4. CIR ← [MDR] (将 MDR 中的指令复制到 CIR)。

解码与执行阶段 (Decode and Execute Stages):

控制单元查看 CIR 中的指令以了解要做什么(解码),然后执行动作,例如将一个数字加到 ACC 中(执行)。

中断 (Interrupts)

中断是发送给 CPU 的信号,表示有事情需要立即处理(例如打印机缺纸或按下了键盘按键)。
• 在每个 F-E 周期的末尾,CPU 都会检查是否有中断。
• 如果有,CPU 会存储当前工作,并执行中断服务程序 (Interrupt Service Routine, ISR)
• 当 ISR 完成后,CPU 会回到刚才中断的地方继续工作。

重点总结: F-E 周期就是提取(获取指令)、解码(理解指令)和执行(完成任务)。中断可以暂停此周期以处理紧急任务。

3. 汇编语言 (Assembly Language)

计算机只能理解机器码 (Machine Code)(二进制:\( 10110010 \))。因为这对人类来说太难读了,我们使用汇编语言,它使用简短的单字,称为助记符 (mnemonics)(如 ADD, LDM, STO)。

寻址模式 (Addressing Modes)

这是我们告诉 CPU 去哪里 寻找数据的方式。
立即寻址 (Immediate): 数值本身就是指令的一部分。(例如:LDM #5 表示“将数字 5 载入到 ACC”)。
直接寻址 (Direct): 指令中给出的是内存地址。(例如:LDD 100 表示“去内存地址 100,取得里面存放的内容”)。
间接寻址 (Indirect): 给出的地址里面存放的是另一个地址。(例如:“去地址 100,找到那里的数字 200,然后去地址 200 取得数据”)。
变址寻址 (Indexed):变址寄存器 (IX) 的内容加到给定的地址,以找到目标地址。这在查找列表时非常有用!
相对寻址 (Relative): 地址是距离当前指令一定数量的位移量。

二遍汇编器 (Two-Pass Assembler)

汇编器 (Assembler) 将汇编语言转换为机器码。它通常分两次“扫描”完成:
1. 第一遍 (Pass 1): 寻找标签 (Labels)(地址的符号名称)并将它们存储在符号表 (Symbol Table)中。
2. 第二遍 (Pass 2): 将助记符转换为二进制,并使用第一遍建立的符号表填入正确的地址。

你知道吗? 我们需要两遍,因为程序可能会指示计算机“跳转到标签 X”,但此时还没读到定义“标签 X”的那一行!

重点总结: 汇编语言是人类可读版的机器码。寻址模式决定了 CPU 如何找到它所需的数据。

4. 位运算 (Bit Manipulation)

有时我们只想更改或检查字节中的某一个位元。这时我们会使用逻辑移位 (Logical Shifts)掩码 (Masking)

二进制移位

逻辑左移 (LSL): 将位元向左移动,右侧补 0。(左移 1 位等于乘以 2!)。
逻辑右移 (LSR): 将位元向右移动,左侧补 0。(右移 1 位等于除以 2)。
算术移位 (Arithmetic Shift): 与逻辑移位类似,但会保留“符号位”(最左边的位元),确保负数保持负数。
循环移位 (Cyclic Shift): 从一端移出的位元会绕回到另一端。不会丢失数据!

位掩码 (Bit Masking)

我们使用 AND, OR, 和 XOR 来处理特定位元。
与 0 进行 AND: 用于清除 (clear) 位元(强制变为 0)。
与 1 进行 OR: 用于设置 (set) 位元(强制变为 1)。
与 1 进行 XOR: 用于反转 (flip) 位元。

类比: 掩码就像绘画时使用的模板。模板(掩码)只允许油漆(运算)到达特定的位置。

重点总结: 移位用于乘除或移动数据。掩码使用逻辑门来更改或检查特定位元。

总结:别紧张!

处理器基础知识的核心在于 CPU 如何搬运数据。记得:
1. 寄存器是内部存储空间。
2. 总线是道路。
3. F-E 周期是运行流程。
4. 汇编语言是程序语言。
5. 位运算是精细调整。

持续练习寄存器传输符号表示法和不同的寻址模式——这些就是你攻克本章节的关键!