# 处理器结构
# 普林斯顿/冯·诺依曼架构
普林斯顿架构(又称冯·诺依曼架构)的特点是指令和数据共用同一个存储器。在这种架构中,CPU 处理器由控制单元和计算单元组成。
# 哈佛架构
与普林斯顿架构不同,哈佛架构将指令存储器和数据存储器分开,使得 CPU 可以同时获取指令和数据,从而提高处理效率。
# 程序执行流程
程序通常通过以下两种方式转化为机器可以执行的指令:
- 编译:高级语言 -> 编译器 -> 汇编语言 -> 汇编器 -> 机器语言。这种方式将整个程序一次性编译成可执行文件。
- 解释:高级语言 -> 解释器 -> 机器语言。这种方式逐行解释并执行程序,不产生独立的编译文件。
# 寄存器与存储器的比较
特性 | 寄存器 | 存储器 |
---|---|---|
访问方式 | 以编号形式访问 | 以地址形式访问 |
并行访问 | 可以同时访问不同的寄存器 | 不可同时访问不同的地址 |
数量/容量 | 数量少 | 地址范围大 |
访问速度 | 快 | 慢 |
# 指令集与寻址方式
# 指令集分类
指令集根据设计理念分为三类:
- 精简指令集(RISC):指令数量较少,每条指令功能简单。
- 复杂指令集(CISC):指令数量较多,每条指令功能复杂。
- 最简指令集(URISC):一种理论上存在的指令集,只有极少数指令。
# 寻址方式
寻址方式决定了处理器如何找到操作数的位置。常见的寻址方式包括:
- 寄存器寻址:直接在指定的寄存器中读取或写入数据。
- 立即数寻址:指令中包含的操作数就是可以直接使用的立即数。
- 基址-偏移寻址:通过“基址 + 立即数偏移量”计算出目的地址。例如,
lw $s0, 4($t0)
表示从$t0
寄存器地址加上 4 字节偏移量后的内存位置加载数据到$s0
。 - PC 相对寻址:通过“程序计数器(PC)+ 立即数”计算出目标地址。主要用于跳转指令,如
beq $t0, $t1, imm
。 - 伪直接寻址:用于绝对地址跳转。它将 PC 的高 4 位固定,并用指令中的低 28 位指定目标地址。例如,
j imm
属于此类。
# 其它
# 可计算性与图灵完备
- 停机问题表明,计算机不可能求解所有问题。
- 图灵完备性是判断一个计算系统是否能够支持通用算法的能力。一个系统如果是图灵完备的,理论上它就能模拟任何图灵机可以完成的计算。
# 多周期处理器控制信号
- 为什么需要
IRWrite
?IR
(指令寄存器)需要保存当前指令,直到该指令执行结束,以便在后续周期中读取和译码。 - 为什么不需要
ALUOutControl
?ALU
(算术逻辑单元)的输出内容只在下一个周期被读取并使用,因此不需要一个独立的控制信号来控制它的输出。
# 异常与中断
- 异常:由内部的、可预测的事件触发,例如算术溢出(如除以零)、非法指令或访存错误。它们是同步的,即在执行特定指令时发生。
- 中断:由外部的、不可预测的事件触发,通常由 I/O 设备引起。它们是异步的,与当前正在执行的指令无关。
# 异常/中断处理
当异常或中断发生时,处理器会执行以下步骤:
- 跳转到异常处理程序:处理器会暂停当前程序,跳转到预先设定的异常/中断处理程序。
- 记录异常原因:使用一个通用异常处理器和原因寄存器来记录异常发生的原因。
- 保存并恢复地址:保存当前程序的执行地址,以便在异常处理完成后能恢复到中断前的状态。