一、指令集架构:CISC 与 RISC
计算机中央处理单元(CPU)内核依据指令集设计理念,主要分为复杂指令集计算机(CISC)与精简指令集计算机(RISC)两大类。
CISC(Complex Instruction Set Computer)以 x86 架构为代表,其指令集丰富,一条指令可完成较为复杂的操作。这种设计带来的直接代价是芯片面积大、制造成本高、逻辑结构复杂、功耗较高,因而在便携式设备中的应用受到限制。
RISC(Reduced Instruction Set Computer)则以 ARM 架构为典型代表。该架构精简了指令集,每条指令仅执行一个基本操作,从而实现了芯片面积小、制造成本低、功耗低、体积小的优势,特别适合于便携式嵌入式设备。当前主流的移动终端、物联网设备普遍采用基于 RISC 理念的 ARM 架构处理器。
二、ARM 处理器核心寄存器
ARM 架构提供了一组核心寄存器,用于支持程序执行和状态管理。以 Cortex-A7 架构(如 i.MX6ULL 处理器)为例,其寄存器体系包括:
-
R0 - R12:通用寄存器,用于存放操作数与中间计算结果。其中 R0 至 R3 通常用于函数参数传递,R0 同时用于返回值的传递。
-
PC 寄存器(R15):程序计数器(Program Counter),本质是一个指针,始终指向当前正在执行指令的下一条指令地址。在 ARM 的三级流水线结构中,PC 的取值与执行阶段存在固定的偏移量。
-
LR 寄存器(R14) :链接寄存器(Link Register),用于保存子程序调用时的返回地址。当执行函数调用时,硬件自动将返回地址存入 LR,函数返回时通过
mov pc, lr或bx lr指令恢复执行流。 -
SP 寄存器(R13):栈指针寄存器(Stack Pointer),用于管理栈区内存。在函数调用过程中,栈用于保存局部变量、函数参数以及返回地址等上下文信息。
-
CPSR 寄存器:当前程序状态寄存器(Current Program Status Register),保存当前处理器运行状态,包括条件标志位(N、Z、C、V)、中断禁止位、当前处理器模式位等。
-
SPSR 寄存器:保存的程序状态寄存器(Saved Program Status Register),当异常发生时,用于备份 CPSR 的值,以便异常返回时恢复处理器状态。
三、三级流水线结构与执行效率
ARM 处理器采用三级流水线结构:取指、译码、执行三个阶段并行进行。PC 指针始终指向取指地址,而执行单元正在处理此前已译码的指令。这一设计有效提高了指令吞吐率,但也要求开发人员在涉及 PC 相对寻址或指令自修改时,需特别注意流水线引入的偏移量问题。
四、Cache 架构与内存管理
为提高 CPU 访问数据的效率,ARM 处理器集成了高速缓存(Cache):
-
icache(指令缓存):用于缓存指令,减少指令取指对主存的访问频率。
-
dcache(数据缓存):用于缓存数据,提高数据读写速度。
在系统启动早期(如 Bootloader 阶段),通常需要关闭 MMU(内存管理单元)和 dcache,以避免地址映射和数据一致性问题,但可以开启 icache 以加快指令取指速度。
MMU(Memory Management Unit)负责虚拟地址到物理地址的映射,使操作系统能够为多个进程提供独立的地址空间,从而提高内存利用率与安全性。在开启 MMU 后,CPU 访问的地址均为虚拟地址,由 MMU 转换为物理地址后访问实际存储器。
五、总线架构与通信方式
ARM 处理器与外设的通信基于总线体系结构,常见总线包括:
-
AHB(Advanced High-performance Bus):先进高速总线,用于连接通信速率要求较高的外设,如 USB 控制器、网卡、RAM 控制器等。
-
APB(Advanced Peripheral Bus):先进外设总线,用于连接通信速率较低的外设,如 GPIO、UART、I2C 控制器等。
这种双总线设计实现了高速设备与低速设备的分离,优化了系统带宽利用率。相比于单总线结构,双总线允许多个外设并行访问,提升了整体系统性能。
六、ARM 处理器工作模式与异常处理
ARMv7 架构(如 Cortex-A7)定义了七种处理器工作模式:
-
User 模式:非特权模式,应用程序运行于此模式,对系统资源访问受限。
-
FIQ 模式:快速中断模式,用于处理高优先级中断。
-
IRQ 模式:普通中断模式,用于处理常规中断。
-
Supervisor 模式:管理模式,系统复位或执行软中断指令(SVC)时进入,操作系统内核通常运行在此模式。
-
Abort 模式:中止模式,当发生数据或指令访问异常时进入。
-
Undef 模式:未定义模式,当执行未定义指令时进入。
-
System 模式:系统模式,与 User 模式共享寄存器集,但拥有特权级别,常用于操作系统任务切换。
当异常发生时,ARM 处理器执行以下硬件操作:
-
将 CPSR 复制到相应异常模式的 SPSR 中;
-
设置 CPSR 的相关位:切换处理器状态、进入 ARM 态、切换到相应的异常模式;
-
根据需要设置中断禁止位;
-
将返回地址保存到该异常模式的 LR 寄存器;
-
将 PC 设置为异常向量表中对应的向量地址。
异常返回时,异常处理程序需执行:
-
从 SPSR_<mode> 恢复 CPSR;
-
从 LR_<mode> 恢复 PC。
这些操作必须在 ARM 态下完成。
七、异常向量表与程序执行
异常向量表是一段固定地址的存储区域,其中存放跳转到各异常服务程序的指令。当异常发生时,处理器强制 PC 指向向量表中对应的入口地址,从而转入相应服务程序。
在程序执行过程中,函数的调用与返回依赖于 PC、LR 和栈机制。函数调用时,当前 PC 值(实际为返回地址)存入 LR,子程序执行完毕后通过 LR 返回;若发生嵌套调用,则需将 LR 压栈保存,防止被内层调用覆盖。
八、存储层次与地址空间
嵌入式系统中常见多种存储器类型:
-
ROM / Flash:非易失性存储器,掉电数据不丢失,用于存储启动代码和固件。
-
RAM:易失性存储器,用于运行时数据和栈空间。
-
Nor Flash:可字节寻址,支持 XIP(就地执行),地址总线和数据总线分离。
-
NAND Flash:以块为单位读写,无法按字节寻址,适合大容量数据存储。
不同处理器在启动阶段会映射不同的存储器地址空间,如 S3C2440 内部 4KB SRAM 用于从 NAND Flash 启动时的初始代码搬运。现代处理器(如 i.MX6ULL)通过 Boot ROM 完成早期初始化,并将 DDR 初始化为主内存。
九、移位操作类型
ARM 指令集中涉及多种移位操作,其行为与数据类型相关:
-
算术右移(ASR):针对有符号数,右移时最高位补符号位,保持数值的符号不变。
-
逻辑右移(LSR):针对无符号数,右移时最高位补 0。
-
循环右移(ROR):移出的最低位循环补到最高位,形成循环移位。
正确选择移位类型对于保持数值精度与符号正确性至关重要。
