第2-1章 ARM编程模型

ARM处理器的工作状态

  • ARM状态,此时处理器执行32位,字对齐的ARM指令
  • Thumb状态,此时处理器执行16位,半字对齐的Thumb指令

bx指令可以切换两者状态

处理器模式

​ ARM处理器支持7种运行模式

处理器模式 描述
用户模式(User, USR) 正常的程序执行状态
快速中断模式(Fast Interrupt Request, FIQ) 用于高速数据传输或通道处理
外部中断模式(Interrupt Request, IRQ) 用于通用的中断处理
特权模式(Supervisor, SVC) 操作系统使用的保护模式
中止模式(Abort, ABT) 当数据或指令预取中止时进入该模式
未定义模式(Undefined, UND) 当未定义的指令执行时进入该模式
系统模式(System, SYS) 运行具有特权的操作系统任务

- 除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式
- FIQ、IRQ、SVC、ABT、UND这5种模式称为异常模式
- 系统模式仅在ARMv4及其以上版本中存在,该模式不能通过任何异常进入,且与用户模式有完全相同的寄存器,但不受用户模式的限制

寄存器组织

​ ARM处理器共有37个32位寄存器,其中包括1个用作PC、一个用作CPSR、5个用作SPSR和30个通用寄存器

image

程序状态寄存器

image

条件码标志

标志位 含义
N 当用两个补码表示的带符号数进行运算时:
N=1表示运算的结果为负数
N=0表示运算的结果位正数或零
Z Z=1表示运算的结果为零
Z=0表示运算的结果为非零
C 加法运算(包括比较指令cmp):当运算结果产生了进位时(无符号溢出),C=1,否则C=0
减法运算(包括比较指令cmp):当运算产生借位时(无符号溢出),C=0,否则C=1
移位操作的非加/减运算指令,C为移出值的最后一位
其它的非加/减运算指令,C的值通常不改变
V 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
对于其它的非加/减法运算指令,V的值通常不改变
Q 在ARMv5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出
其它版本的处理器种,Q标志位无定义

- 中断禁止位I、F:置1时禁止IRQ中断和FIQ中断
- T标志位:置1时为Thumb状态,置0时为ARM状态
- 运行模式位M[4:0]决定了处理器的运行模式

M[4:0] 处理器模式
10000 用户模式
10001 FIQ模式
10010 IRQ模式
10011 管理模式
10111 中止模式
11011 未定义模式
11111 系统模式

异常

ARM对异常的处理按以下步骤操作:

  1. 将下一条指令的地址存入相应连接寄存器LR
  2. 将CPSR复制到相应的SPSR
  3. 根据异常类型,强制设置CPSR的运行模式位
  4. 强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处

异常处理完毕之后,执行以下几步操作从异常返回:

  1. 将连接寄存器LR的值减去相应的偏移量后送到PC中
  2. 将SPSR复制回CPSR中
  3. 若在进入异常处理时设置了中断禁止位,要在此清除
模式 返回指令
FIQ subs pc, r14_fiq, #4
IRQ subs pc, r14_irq, #4
ABT subs pc, r14_abt, #4 ;指令预取中止
subs pc, r14_abt, #8 ;数据中止
SVC movs pc, r14_svc
UND movs pc, r14_und
地址 异常 模式
0x0000 0000 复位 管理模式
0x0000 0004 未定义指令 未定义模式
0x0000 0008 SWI软件中断 管理模式
0x0000 000c 中止(预取指令) 中止模式
0x0000 0010 中止(数据) 中止模式
0x0000 0014 保留 保留
0x0000 0018 IRQ IRQ
0x0000001c FIQ FIQ

优先级由高到低:复位,数据中止,FIQ,IRQ,预取指令中止,未定义指令,SWI

FIQ处于异常地址末尾,可省略一条跳转指令

猜你喜欢

转载自blog.csdn.net/o_rdwr/article/details/81099819