目录
一、ARM的7种运行模式和2种工作状态
1、七种运行模式
| 处理器工作模式 | 特权模式 | 异常模式 | 说明 |
| 用户(user)模式 |
|
| 用户程序运行模式 |
| 系统(system)模式 | 该组模式下可以任意访问系统资源 |
| 运行特权级的操作系统任务 |
| 一般中断(IRQ)模式 | 通常由系统异常状态切换进该组模式 | 普通中断模式 | |
| 快速中断(FIQ)模式 | 快速中断模式 | ||
| 管理(supervisor)模式 | 提供操作系统使用的一种保护模式,swi命令状态 | ||
| 中止(abort)模式 | 虚拟内存管理和内存数据访问保护 | ||
| 未定义指令终止(undefined)模式 | 支持通过软件仿真硬件的协处理 |
2、两种工作状态
1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。
2、Thumb状态,16位,执行半字对齐的16位指令。
3、用Bx Rn指令来进行两种状态的切换:
其中Bx是跳转指令,而Rn是寄存器(1个字,32位),如果Rn的位0为1,则进入Thumb状态;如果Rn的位为0,这进入ARM状态。(原 因:ARM指令的后两位始终为0,没有用,而Thumb指令的后一位始终为0,没有用,因此采用位0来表示ARM指令与Thumb指令的切换标志位。)
注:1)ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。
2)ARM处理器在处理异常时,不管处理器处于什么状态,则都将切换到ARM状态。
另外:1)ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令
2)S3C2440.S启动代码中根本就没用Thumb指令
二、ARM支持的异常类型
| 异常类型 | 进入的模式 | 地址(异常向量) | 优先级 |
|---|---|---|---|
| 复位 | 管理模式 | 0x0000, 0000 | 1(最高) |
| 未定义的指令 | 未定义模式 | 0x0000, 0004 | 6(最低) |
| 软件中断 | 管理模式 | 0x0000, 0008 | 6(最低) |
| 指令预取终止 | 终止模式 | 0x0000, 000C | 5 |
| 数据终止 | 终止模式 | 0x0000, 0010 | 2 |
| IRQ(外部中断请求) | IRQ | 0x0000, 0018 | 4 |
| FIQ(快速中断请求) | FIQ | 0x0000, 001C | 3 |
三、ARM基本指令及功能描述
| 助记符 | 指令功能描述 |
| ADC | 带进位加法指令 |
| ADD | 加法指令 |
| AND | 逻辑与指令 |
| B | 跳转指令 |
| BIC | 位清零指令 |
| BL | 带返回的跳转指令 |
| BLX | 带返回和状态切换的跳转指令 |
| BX | 带状态切换的跳转指令 |
| CDP | 协处理器数据操作指令 |
| CMN | 比较反值指令 |
| CMP | 比较指令 |
| EOR | 异或指令 |
| LDC | 存储器到协处理器的数据传输指令 |
| LDM | 加载多个寄存器指令 |
| LDR | 存储器到寄存器的数据传输指令 |
| MCR | 从 ARM 寄存器到协处理器寄存器的数据传输指令 |
| MLA | 乘加运算指令 |
| MOV | 数据传送指令 |
| MRC | 从协处理器寄存器到 ARM 寄存器的数据传输指令 |
| MRS | 传送 CPSR 或 SPSR 的内容到通用寄存器指令 |
| MSR | 传送通用寄存器到 CPSR 或 SPSR 的指令 |
| MUL | 32 位乘法指令 |
| MLA | 32 位乘加指令 |
| MVN | 数据取反传送指令 |
| ORR | 逻辑或指令 |
| RSB | 逆向减法指令 |
| RSC | 带借位的逆向减法指令 |
| SBC | 带借位减法指令 |
| STC | 协处理器寄存器写入存储器指令 |
| STM | 批量内存字写入指令 |
| STR | 寄存器到存储器的数据传输指令 |
| SUB | 减法指令 |
| SWI | 软件中断指令 |
| SWP | 交换指令 |
| TEQ | 相等测试指令 |
| TST | 位测试指令 |
博客围绕ARM展开,介绍了其7种运行模式和2种工作状态,包括ARM状态和Thumb状态及切换方式,还提到处理异常时会切换到ARM状态。此外,阐述了ARM支持的异常类型以及基本指令和功能描述。
5814

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



