找回密码
 注册
关于网站域名变更的通知
查看: 506|回复: 2
打印 上一主题 下一主题

ARM寄存器分析以及异常处理方法

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-30 13:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ARM 有7个基本工作模式
8 h! f2 k2 I8 X7 D* L8 X  User : 非特权模式,大部分任务执行在这种模式
/ h( w& T% _9 g' d  FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
# n5 y) K6 L  N$ J* Y% M  IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式. [! H( j) R! r( ^( s
  Supervisor :当复位或软中断指令执行时将会进入这种模式6 \" Q4 `$ f1 h5 b9 E$ F
  Abort : 当存取异常时将会进入这种模式
/ ?9 |. q9 {# Z8 F  Undef : 当执行未定义指令时会进入这种模式, B" a& m3 B& f3 O8 {- G. t
  System : 使用和User模式相同寄存器集的特权模式1 G3 T- v) U5 a7 {0 v
  注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。
, E1 N) L" j" z% z* x  非特权模式:User
7 b: W/ \( F, _# z) R' w3 e: s0 L  特权模式:0 W6 n5 [. _( [
  异常模式:FIQ IRQ Svc Abort Udef
4 F" d# [; V2 L* i% j& Z8 h9 W$ z  非异常模式:System  Monitor, K  H# H) J/ {, K' U* z& B8 A: U

! p7 t& X) p0 ~5 }
' ]3 Q% Y4 F6 E1 c1 d

, A* t9 i7 x% N" u( kARM寄存器分析5 R$ r5 S) ?! b/ ]2 c0 X: {9 O
  ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。
6 o% g/ v9 M; ^# v  r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行
+ l4 X, W0 o" k! g& g( i% ~  r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回
, k0 @7 F6 ]% b) F1 C8 p: X; M  r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中): \& r1 f9 v- H/ E& O
  cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和7 m% S( p- u" [3 k5 _
  CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,
" F9 U% f) c- {! y: }  在uboot代码中会使用汇编进行设置。" R- ~! I8 U# S! o3 P
  spsr:用来保存cpsr* B. _6 l$ t3 ]- b* O8 y

8 U8 i% ?! A) d' X- j2 r
1 J9 v; E# [/ s( e2 ~+ V0 a" T1 B
" y& R, u5 }2 p7 Y) ]% m9 \% }

; Y0 `7 U9 r  q7 P$ A! }6 M1.条件标志位% f/ D, L5 f& K! C! P
  -N: Negative result from ALU$ F3 \0 ]: q  j/ C
  -Z: Zero result from ALU7 s& r( U. c  C  Y  M9 l
  -C: ALU operation Carried out (进位/借位)$ E2 ^. D( c2 O) B( p' e2 q' V
  -V: ALU operation oveRFlowed (溢出)% b8 b- T' W8 s1 S) F6 f
  * N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。. G( g: x4 I9 q: A. ]
  * Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。9 `4 K5 I  K& H2 T9 N( [0 y5 B
  * C:
9 E1 P5 _) A! \0 L  - 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。
$ Q9 e- u( E' Z7 Z* J  - 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。) [& O5 I( v8 R! T
  - 对于包含移位操作的非加减指令操作时,C为移除值的一位。
0 I5 B" [9 ]0 e; u& t8 x  - 对于其它的非加减指令,C的值通常不变。
0 r; @! ~! c) C  P  * V:
: N$ ]' h( P3 G! L- u5 l  - 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
: B, T+ [7 w# t/ u; \  - 对于其它的非加减法指令,V的值通常不变。
, L  ]6 O! V7 f; A6 E! k  2.Q位:
+ o( P6 v5 o) j1 Y" R2 F  * 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。8 W* r3 P" l3 q$ ?6 }
  3.J位:3 B7 p0 z$ ?' k! ^9 k; S
  * 仅ARM 5TE/J 架构支持
0 w2 s8 Z5 G* [  * J=1时,处理器处于Jazelle状态
4 E: u1 u2 d  B  跳转过程6 v- o2 Q: E+ Q6 P$ F. L2 W
  异常向量表
7 u5 n, G# }* {) [  所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。# b# A2 O1 G4 h' }! G' Y
  ***异常产生时
+ ]& [; f& p" o- V5 S- V) X. d  做好保护现场的工作:
+ b1 f" B  _! _+ X  (1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)
3 I2 X. ~; `9 c1 @% H9 m  (2)保存返回地址到lr
0 U; _' W9 D% v" N5 [! B  (3)设置pc为相应的异常向量' @* t5 _7 s/ W
  实现跳转。
; }- l8 l: `9 N* |  ***异常返回时( L, |8 e4 e. Z8 a  e& P$ X+ [  R
  做好恢复现场工作:
& G: J; I" u3 F7 s' c& d8 Z  (1)从spsr恢复cpsr4 _+ ?7 a1 @6 Y$ U5 a  z5 C, K
  (2)从lr恢复pc
1 E9 P" x) ^: M: b& x# l  注意:这些操作必须在ARM状态执行) E( e2 ~. ^: R4 X$ d
  TIPS:
  P& ~$ d7 D5 A4 v3 X, P' `! r  (1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址
. C+ \: |# H  A1 U' y0 P  (2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了,加快了中断相应速度。
1 {8 M* L2 @: E
5 u- G& X, A0 s; |9 i2 @
  • TA的每日心情
    慵懒
    2025-11-20 15:10
  • 签到天数: 423 天

    [LV.9]以坛为家II

    2#
    发表于 2021-4-30 14:14 | 只看该作者
    学习了!不错!
  • TA的每日心情
    开心
    2022-12-5 15:37
  • 签到天数: 2 天

    [LV.1]初来乍到

    3#
    发表于 2021-4-30 15:05 | 只看该作者
    FIQ中断为快速中断
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 08:19 , Processed in 0.156250 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表