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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM 有7个基本工作模式% ]2 t% d& ^* h
  User : 非特权模式,大部分任务执行在这种模式
) ]0 A0 S. _) K1 ^3 U  FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
7 V1 \5 ^# c$ j' a  IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式6 c( u% ]# M6 N7 }* }# H) r
  Supervisor :当复位或软中断指令执行时将会进入这种模式1 W, \! C9 G4 R% @  c! N
  Abort : 当存取异常时将会进入这种模式/ m) j0 |& B8 a) D' A* C
  Undef : 当执行未定义指令时会进入这种模式) G, p, P& h7 t
  System : 使用和User模式相同寄存器集的特权模式: h" m9 A, X, `/ {7 p
  注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。
' L! p9 p6 Y. L6 f  非特权模式:User1 c5 k' h! K9 D' A
  特权模式:
# V8 r7 n6 `, L, ]3 ~  异常模式:FIQ IRQ Svc Abort Udef
; S/ e$ U$ V& M1 G( k) Y* d0 H  非异常模式:System  Monitor& M7 C2 }8 a% n2 d  r
- g  l7 }3 n0 R# W
  m9 R( F! S- U

' D2 _3 p1 h: [. F9 x# \, B( QARM寄存器分析
7 i( G( e1 C1 }9 _+ ~+ Z! ]  ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。
9 l7 s: K* b. _; g9 u! _  G4 y& S  r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行
- D  G6 W' }$ t2 ]! R  r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回
7 k& B( l4 i3 t1 q" d+ t  r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)/ H# w2 q- z; A3 j, h) y
  cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和1 g" z& Y- e+ }8 w7 |( I9 w( t
  CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,
' }. h3 q. K, @1 M6 d! c7 g' M  在uboot代码中会使用汇编进行设置。
+ R% Q2 E, q4 |0 ]- O8 B  spsr:用来保存cpsr
5 ^" T2 F+ a; [' B0 `# m; v9 r$ h1 S+ e
  Z' i1 S/ D8 f% x0 S: c# ]

! x3 R+ D% x1 R$ v: P% W' p' J3 a: e$ I3 z& q2 Q
1.条件标志位$ c* C! @+ z* T" }5 H
  -N: Negative result from ALU8 Z! Y% x6 n/ W% [  t+ R* d
  -Z: Zero result from ALU2 a3 s6 e/ @+ ]7 J
  -C: ALU operation Carried out (进位/借位)
4 s0 d3 q9 c1 G2 ]+ a  S  -V: ALU operation oveRFlowed (溢出)
9 A$ ]% r# G$ k8 e& [. ]  * N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。
/ ?3 ], O' _+ A  * Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。# ]0 @9 a5 z& I& ^" j
  * C:+ a& L& o3 K! x: H4 ^6 K
  - 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。
% M, K& I: G( D5 e' ]9 `( J% {  - 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。7 B4 x3 P% E( H8 L, B% @  q
  - 对于包含移位操作的非加减指令操作时,C为移除值的一位。% t3 Q+ K! h! t( Z: a
  - 对于其它的非加减指令,C的值通常不变。
8 n/ g& ]. N" y  * V:
. s% I5 R) N. d  - 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
+ d+ ?( o' P$ q, h  - 对于其它的非加减法指令,V的值通常不变。
3 N1 j7 o; r; B% ]/ n5 f  2.Q位:
! c, B2 G8 u( P  \- o+ n5 X" |  * 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。
( t, Q( w7 H* ]/ L. K% A  3.J位:
3 u2 K% i' b) M( [; y) d7 S, t  * 仅ARM 5TE/J 架构支持
/ L8 _9 ^) O+ i4 u: g  * J=1时,处理器处于Jazelle状态
* J* K7 K( @! _# D6 Y) y# T  跳转过程& `; u/ l) N9 y$ K0 h3 T5 }( b( I
  异常向量表
/ r2 @! \4 I3 I  S  所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。
. \2 N6 O1 W- S( v  ***异常产生时
, [& b6 V) Q! l  e' Y: X! g( ]0 B# b  做好保护现场的工作:8 r& G/ D7 r5 C( ^
  (1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)& `8 [- X; {+ @0 }$ Q
  (2)保存返回地址到lr* M! I0 i" c; a; R
  (3)设置pc为相应的异常向量7 J  W; }* A0 F2 p: e" D; |8 ^- V) @
  实现跳转。8 g1 h  }- O" j' W* E8 \
  ***异常返回时
4 F" }) s8 i8 S! W, }8 l  做好恢复现场工作:# D  ~9 n# ]" z; x, O/ Q
  (1)从spsr恢复cpsr. ~# R8 D4 _, T# q; X
  (2)从lr恢复pc8 d8 ^6 S6 C& _+ j, x
  注意:这些操作必须在ARM状态执行: u" [2 z. R' U. Y0 ]2 {& R
  TIPS:6 ]& O$ W4 I7 `8 z. D  I% |
  (1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址
, n% n: o- ?' ?1 a4 p  (2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了,加快了中断相应速度。
" u" i, a1 `0 V2 g* O8 F' [4 K) g8 ]" j. L( i
  • 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 14:23 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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