2.2 ARM体系结构
🔴 超高频考点,大量选择题和填空题
ARM工作状态
ARM处理器有两种工作状态:
| 状态 | 指令宽度 | 特点 |
|---|---|---|
| ARM状态 | 32位指令 | 性能更强 |
| Thumb/Thumb-2状态 | 16位(Thumb)或16/32位混合(Thumb-2) | 代码密度更高,占存储空间小 |
还有一种: - 调试状态(某些核有)
选择题
错误说法:"ARM状态既支持16位指令宽度也支持32位指令宽度" → 错误! ARM状态只有32位指令,Thumb状态才是16位
正确说法: - ARM处理器复位后总处于ARM状态 ← 这个是正确的 - Thumb状态代码密度大于ARM状态,占存储空间小 ← 正确
官方样题第12题:哪个说法错误?答:B(ARM状态支持16位指令是错的)
ARM 7种工作模式
ARM处理器有7种工作模式,对应不同的权限和场景:
| 模式 | 英文 | 触发方式 |
|---|---|---|
| 用户模式 | User | 正常应用程序运行 |
| 快速中断模式 | FIQ | 快速中断发生时 |
| 外部中断模式 | IRQ | 外部中断发生时 |
| 管理模式 | Supervisor | 复位/软件中断SWI后进入 |
| 数据访问中止 | Abort | 内存访问失败 |
| 未定义指令 | Undefined | 执行未知指令 |
| 系统模式 | System | 特权级用户模式 |
CPSR寄存器
CPSR(Current Program Status Register)= 当前程序状态寄存器
这个寄存器非常重要,它记录了: - 当前工作状态(ARM/Thumb) - 当前工作模式(User/FIQ/IRQ等) - 是否允许 IRQ 中断 - 是否允许 FIQ 中断 - 条件标志位(N/Z/C/V)
选择题
问:要设置ARM处理器工作在外部中断模式,允许IRQ,禁止FIQ,使用Thumb状态,需要设置哪个寄存器?
答:C)CPSR
PSP和MSP是Cortex-M的栈指针寄存器,SPSR是保存的程序状态寄存器(中断时保存CPSR)。 设置当前工作状态和模式 → 修改 CPSR
ARM寄存器组织
ARM处理器内部有很多寄存器:
- 通用寄存器:R0~R12(共13个)
- 栈指针:R13(SP)
- 链接寄存器:R14(LR)— 存放子程序返回地址
- 程序计数器:R15(PC)— 存放下一条指令地址
重要
调用子程序时:
- BL label → 跳转并把返回地址存入 LR(R14)
- MOV PC, LR → 把LR的值放回PC,实现返回
ARM 7种异常
填空题必考,必须背下来!
7种异常(按优先级从高到低):
1. 复位(Reset) ← 优先级最高
2. 快速中断请求(FIQ)
3. 外部中断请求(IRQ)
4. 指令预取中止(PABT)
5. 数据访问中止(DABT)
6. 软件中断(SWI)
7. 未定义指令(UND) ← 优先级最低
填空题: - 7种异常包括:复位RESET、未定义指令UND、软件中断SWI、指令预取中止PABT、数据访问中止DABT、外部中断请求IRQ及__,其中优先级最高的异常是____。 - 答:快速中断(FIQ);复位(RESET)
大端模式与小端模式
这是高频选择题,需要会手算。
通俗解释: - 大端(Big-Endian):高位字节存在低地址(像写书一样,从前往后) - 小端(Little-Endian):低位字节存在低地址(ARM默认是小端,但支持大端)
计算题(必须会做)
题目:内存中: - 0x80000000 → 0x33 - 0x80000001 → 0x31 - 0x80000002 → 0x30 - 0x80000003 → 0x35
问:ARM在大端模式下,地址0x80000000所指示的一个字(4字节)是?
大端模式解析:最低地址存最高字节 - 最高字节(byte3)在地址0x80000000 = 0x33 - byte2在0x80000001 = 0x31 - byte1在0x80000002 = 0x30 - 最低字节(byte0)在0x80000003 = 0x35
所以这个字 = 0x33313035
答:D)0x33313035
(小端模式的话,最低地址存最低字节,结果就是反过来)
数据类型
ARM支持的数据类型: - 字节(Byte):8位 - 半字(Half-Word):16位 - 字(Word):32位
记住后缀: - B = Byte(字节) - H = Half-word(半字) - 无后缀 = Word(字,32位)
真题演练
以下是NCRE三级嵌入式真题中与本节相关的典型考题:
1. 关于ARM处理器的工作模式,以下说法错误的是( )。
- A)用户模式是程序正常执行的模式
- B)快速中断模式处理高速中断,用于高速数据传输或通道处理
- C)管理模式用于操作系统的保护模式,处理软中断
- D)系统模式用于处理未定义的指令陷阱
答案解析
答:D 系统模式是运行具有特权的操作系统任务,而非处理未定义指令。处理未定义指令的是未定义指令模式(UND)。ARM的7种工作模式要准确区分各自用途。
2. 以下关于ARM处理器CPSR寄存器说法错误的是( )。
- A)CPSR记录ARM的工作状态
- B)CPSR决定ARM工作模式
- C)CPSR可设定是否允许外部中断和快速中断
- D)CPSR是ARM的控制寄存器
答案解析
答:D CPSR的全称是当前程序状态寄存器(Current Program Status Register),不是控制寄存器。它包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。A、B、C三项描述均正确。
3. ARM处理器如果R1=0x98001200,已知在小端模式下,内存0x98001204中存放数据0x35,0x98001205中存放数据0x36,0x98001206中存放数据0x37,0x98001207中存放数据0x38,在指令LDR R0,[R1,#4]执行后,R0中的值为( )。
- A)0x35363738
- B)0x36353837
- C)0x38373635
- D)0x37383536
答案解析
答:C 首先,LDR R0,[R1,#4]从地址R1+4=0x98001204处加载一个字。在小端模式下,低地址存低字节:0x98001204存的0x35是最低字节(byte0),0x98001207存的0x38是最高字节(byte3)。因此读出的字为0x38373635。
4. 【填空题】经典ARM处理器有7种异常:主要包括复位RESET、未定义指令UND、软件中断SWI、指令预取中止PABT、数据访问中止DABT、外部中断请求IRQ以及_,其中优先级最高的异常是_。
答案
答:快速中断FIQ;复位RESET ARM的7种异常按优先级从高到低:复位 > 快速中断FIQ > 外部中断IRQ > 指令预取中止 > 数据访问中止 > 软件中断 > 未定义指令。
5. 【填空题】在ARM处理器中,R0~R15是通用寄存器,其中作为堆栈指针SP使用的寄存器是_,作为程序链接寄存器LR使用的是_。
答案
答:R13;R14 ARM通用寄存器中,R13用作堆栈指针(SP),R14用作程序链接寄存器(LR,存放子程序返回地址),R15用作程序计数器(PC)。