Cortex-A7 MPCore
Cortex-A7 MPCore 支持在一个处理器上选配 1~4 个内核。
Cortex-A系列的ARM在还来7种运行模式上增加了TruZone安全扩展模式。而后续的新的CPU又增加了Monitor模式,所以共有9种模式。
| 模式 | 描述 |
|---|---|
| User(USR) | 用户模式,非特权模式,大部分程序运行的时候就处于此模式。 |
| FIQ | 快速中断模式,进入 FIQ 中断异常 |
| IRQ | 一般中断模式。 |
| Supervisor(SVC) | 超级管理员模式,特权模式,供操作系统使用。 |
| Monitor(MON) | 监视模式?这个模式用于安全扩展模式。 |
| Abort(ABT) | 数据访问终止模式,用于虚拟存储以及存储保护。 |
| Hyp(HYP) | 超级监视模式?用于虚拟化扩展。 |
| Undef(UND) | 未定义指令终止模式。 |
| System(SYS) | 系统模式,用于运行特权级的操作系统任务 |
其中常见的就是用户模式和系统模式。
通用寄存器
9种模式下,其中R0~R7是通用寄存器,R8~R15在不同的模式下,访问时会有区别。
- R13(SP):堆栈指针寄存器
R14(LR):链接寄存器,即子程序返回寄存器,每种处理器模式使用 R14(LR)来存放当前子程序的返回地址或当异常发生以后,该异常模式对应的 R14寄存器被设置成该异常模式将要返回的地址,R14 也可以当作普通寄存器使用
R15(PC):程序计数器:ARM 处理器 3 级流水线:取指->译码->执行,这三级流水线循环执行,比如当前正在执行第一条指令的同时也对第二条指令进行译码,第三条指令也同时被取出存放在 R15(PC)中。我们喜欢以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么 R15(PC)中存放的就是第三条指令,换句话说就是 R15(PC)总是指向当前正在执行的指令地址再加上 2 条指令的地址。对于 32 位的 ARM 处理器,每条指令是 4 个字节,所以
R15 (PC)值 = 当前执行的程序位置 + 8 个字节。
程序状态寄存器
CPSR:是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位.所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器,叫做 SPSR(备份程序状态寄存器),当特定的异常中断发生时, SPSR 寄存器用来保存当前程序状
态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR.
因为 User 和 Sys 这两个模式不是异常模式,所以并没有配备 SPSR,因此不能在 User 和 Sys 模式下访问 SPSR,会导致不可预知的结果。

| 标志 | 含义 | 说明 |
|---|---|---|
| N (负标志) | 结果为负 | 1=结果为负;0=结果为正 (有符号数判断) |
| Z (零标志) | 结果为零 | 1=结果为零;0=结果非零 (常用于比较相等) |
| C (进位标志) | 进位/借位 | 加法:1=有进位 (无符号数上溢) 减法:1=无借位;0=有借位 (无符号数下溢) |
| V (溢出标志) | 符号位溢出 | 1=结果溢出 (有符号数判断) |
| 控制位 | 功能 |
|---|---|
| I/F | 中断开关 (1=禁止,0=使能) |
| T | 指令集 (0=ARM,1=Thumb) |
| M[4:0] | 处理器模式 |
|---|---|
| 10000 | User 模式 |
| 10001 | FIQ 模式 |
| 10010 | IRQ 模式 |
| 10011 | Supervisor (SVC) 模式 |
| 10110 | Monitor (MON) 模式 |
| 10111 | Abort (ABT) 模式 |
| 11010 | Hyp (HYP) 模式 |
| 11011 | Undef (UND) 模式 |
| 11111 | System (SYS) 模式 |
ARM&Linux科谱





