第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表示运算的结果位正数或零
ZZ=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用户模式
10001FIQ模式
10010IRQ模式
10011管理模式
10111中止模式
11011未定义模式
11111系统模式

异常

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

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值