一、计算机系统硬件组成
计算机硬件由五大基本部件构成:
- 运算器 + 控制器(合称 CPU):是计算机的硬件核心,负责数据处理、指令执行和系统控制。
- 存储器:用于存储程序和数据,分为:
- 内部存储器(内存):访问速度快、容量较小,用于临时存放正在运行的程序和数据。
- 外部存储器(外存):如硬盘、U盘等,容量大、速度慢,用于长期保存信息。
- 输入设备:如键盘、鼠标、扫描仪等,将用户指令或数据传入计算机。
- 输出设备:如显示器、打印机、音响等,将计算机处理结果呈现给用户。
- 总线系统(虽未明确列出,但实际连接各部件):传输数据、地址和控制信号。
二、CPU 的功能与组成
-
CPU 的主要功能:
- 程序控制:通过程序计数器(PC)控制指令的执行顺序。
- 操作控制:控制器发出控制信号,协调各个部件完成指令操作。
- 时间控制:确保各操作按正确的时序进行(如取指、译码、执行)。
- 数据处理:利用 ALU 完成算术与逻辑运算,是核心计算能力。
- 中断处理:响应外部事件(如键盘输入)或内部异常(如除零错误),暂停当前任务转而处理紧急事务。
-
CPU 的核心组成部分:
| 部件 | 子组件及功能说明 |
|---|---|
| 运算器 | - ALU(算术逻辑单元):执行加减、与或非等运算。 - 累加寄存器 AC:作为运算过程中的主工作寄存器。 - 数据缓冲寄存器 DR:暂存从内存读出或写入的数据,起缓冲作用。 - 状态条件寄存器 PSW:记录运算结果的状态(如进位标志 C、零标志 Z、溢出标志 V 等)。 |
| 控制器 | - 指令寄存器 IR:保存当前正在执行的指令。 - 程序计数器 PC:指向下一条要执行的指令地址。 - 地址寄存器 AR:保存当前 CPU 要访问的内存地址。 - 指令译码器 ID:分析指令的操作码,生成相应的控制信号序列。 |
| 寄存器组 | 包括通用寄存器(供程序员/编译器灵活使用)和专用寄存器(如 SP 栈指针、BP 基址指针等),提高访问速度。 |
- 多核 CPU
- 定义:在一个物理 CPU 芯片中集成两个或多个独立的处理器核心,每个核心拥有自己的运算器、控制器和一级缓存(L1 Cache),共享二级甚至三级缓存。
- 主流厂商实现方式:
- AMD:采用单 Die 多核设计,核心间通过高速互连架构(如 Infinity Fabric)通信,集成度高、延迟低。
- Intel:早期采用“双芯封装”技术(多个芯片封装在一起),现代也转向单 Die 多核。
- 优势:真正实现并行计算,显著提升多任务、多线程应用性能。
- 发挥性能的前提:
- 操作系统需支持多线程调度;
- 应用程序需设计为可并行化结构(如使用多线程编程模型)。
三、数据表示(机器数)
在计算机内部,所有数据均以 二进制形式 表示,称为“机器数”。主要包括以下类型:
-
无符号数
- 所有位都表示数值大小,仅能表示非负整数(0 及正数)。
- 例如:8 位无符号数范围是 0 ~ 255(即 00000000₂ ~ 11111111₂)。
-
带符号数
- 最高位为 符号位:0 表示正数,1 表示负数。
- 常见编码方式:
- 原码:符号位 + 数值的绝对值。
- 缺点:+0 和 -0 有两种表示(如 8 位下:+0=00000000,-0=10000000),不利于运算。
- 反码:
- 正数反码 = 原码;
- 负数反码 = 符号位不变,其余各位取反。
- 示例:-5 的 8 位原码为 10000101 → 反码为 11111010。
- 补码(最常用):
- 正数补码 = 原码;
- 负数补码 = 反码 + 1。
- 优点:统一了加减法运算(减法可用加法实现),且只有一个零(解决了 ±0 问题)。
- 示例:-5 的补码 = 11111011。
- 移码:常用于浮点数的阶码表示,便于比较大小(尤其判断指数正负)。
- 原码:符号位 + 数值的绝对值。
注:现代计算机普遍采用 补码 来表示带符号整数,简化硬件设计。
# 示例:Python 中查看负数的 8 位补码表示
def get_8bit_complement(n):
if n >= 0:
return format(n, '08b')
else:
return format((1 << 8) + n, '08b') # 补码计算:2^8 + (-n)
print(get_8bit_complement(-5)) # 输出: 11111011
程序计数器(PC) 和 指令寄存器(IR) 是 CPU 控制器中的两个关键寄存器,它们在指令执行过程中扮演不同但密切相关的角色。主要区别如下:
| 对比项 | 程序计数器(PC) | 指令寄存器(IR) |
|---|---|---|
| 功能 | 存放下一条将要执行的指令在内存中的地址。 | 存放当前正在执行的那条指令的完整内容(操作码 + 地址码)。 |
| 作用阶段 | 取指前:提供地址以从内存中取出指令。 | 取指后:用于译码和执行当前指令。 |
| 更新时机 | 通常在每次取指完成后自动递增(或被跳转指令修改)。 | 每当一条新指令被取入 CPU 后即被更新。 |
| 是否参与控制 | 控制指令流的顺序(顺序执行或跳转)。 | 提供给指令译码器(ID),决定需要执行何种操作(如加法、跳转等)。 |
| 举例说明 | 若 PC = 0x1000,则 CPU 将从内存地址 1000H 处读取下一条指令。 | 假设 IR 中的内容是 0010 1100,译码器会识别出这是“将数据加载到累加器”的指令。 |
工作流程示意:
1. PC → 地址寄存器(AR) → 访问内存指定地址
2. 内存返回指令 → 数据缓冲寄存器(DR) → 装入 IR
3. IR 提供给指令译码器 → 生成控制信号
4. PC 自动+1(或由跳转指令设置新值)→ 指向下一条指令
✅ 简记口诀:
- PC 管“去哪里取”(地址)
- IR 管“现在做什么”(指令内容)


2360

被折叠的 条评论
为什么被折叠?



