目录
一、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 |
位测试指令 |