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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM 有7个基本工作模式
/ ^7 O/ V! E+ Z  User : 非特权模式,大部分任务执行在这种模式
0 R3 I3 p, B5 A/ M- ~& r! r2 p& n  FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式) M5 u2 Z1 ^# r: t7 f# G
  IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式* [/ H& V. k6 z. X, Z7 f+ I
  Supervisor :当复位或软中断指令执行时将会进入这种模式
$ K3 V. }; _" e1 X  Abort : 当存取异常时将会进入这种模式
+ R5 n) T; ?( j+ n" r' M# B  Undef : 当执行未定义指令时会进入这种模式
0 L& N. Q5 f/ H0 c9 J8 n  System : 使用和User模式相同寄存器集的特权模式) U3 R$ k7 _2 B. }" \0 o6 b
  注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。
5 i- o5 s, y  f7 U  非特权模式:User9 @% z/ L' n3 ^
  特权模式:
" S$ E4 m7 w1 v; X8 Y1 y* }) V  异常模式:FIQ IRQ Svc Abort Udef) c2 K# B2 c1 S8 X1 ^
  非异常模式:System  Monitor
2 X; C9 p+ S# x( H
4 w( n: G" R: l$ \1 D. C/ A
% U, g9 h/ E; g6 K9 ?
' U# i3 M' l4 B% }/ q
ARM寄存器分析, ~; @4 k7 c. Y
  ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。$ x" M4 v7 }& ]$ S2 s- j3 p8 `
  r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行
# I6 C8 a$ s1 Y$ I0 _  r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回
) B  }3 m+ k3 K/ A; R# \1 y  r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)1 l; J0 b+ v+ G) f2 `& w2 Q/ [
  cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和- c7 v# x" Y- D9 V
  CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,$ z+ f8 I8 X& u8 v' Q: a
  在uboot代码中会使用汇编进行设置。
4 @! q$ W9 q9 ?( f+ t/ S0 Q+ P0 d  O* c  spsr:用来保存cpsr. Y% Q( j2 u3 C
) G6 b& z5 Q, ]  Z
/ [! b; Q. Q. n4 F$ n, M

/ `, x& H8 |& O" t! f( @+ n
8 @; T/ l9 t5 y5 ^) _* \3 g1.条件标志位
( R+ E! `2 L6 ^. E- U5 y& c  -N: Negative result from ALU
7 X2 V+ b# d0 Q2 W5 B- x, P+ E3 J( |  -Z: Zero result from ALU
$ U/ t% U) j: x( T  -C: ALU operation Carried out (进位/借位)* c) R& |% f) ?' l- }2 H; Q
  -V: ALU operation oveRFlowed (溢出)
0 }0 ]! a+ N" ^& K. \" v& r  * N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。
5 }5 p- X4 G; @4 C8 {+ p  * Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。9 R: K3 ?2 }  [6 ^  ^3 y( O) S
  * C:
8 \3 f" [! X$ Y9 z  g  - 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。
' Z* X- i5 Q1 m  - 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。& H+ G+ \% ~! H9 a! f8 Q
  - 对于包含移位操作的非加减指令操作时,C为移除值的一位。
4 k$ U) k/ j7 l1 A  l2 [  - 对于其它的非加减指令,C的值通常不变。
) q1 x- C! W) Z8 f  * V:/ y1 @5 q* e' c$ t
  - 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
8 O- d- }5 t$ N0 I/ c: `  - 对于其它的非加减法指令,V的值通常不变。
3 G: @$ A6 S9 F3 ]* O  2.Q位:& A8 z" H8 t+ F/ u
  * 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。& T4 M: w; C  W8 X' F7 q
  3.J位:' r+ }% u0 |) b
  * 仅ARM 5TE/J 架构支持! f9 O" I( x7 _& `# x7 d
  * J=1时,处理器处于Jazelle状态
& D( [) t7 I2 V2 ~1 ?  跳转过程
2 Q/ a3 z% e5 ^  异常向量表
1 h. p+ U) C4 J' Q- n) u9 Q  所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。
/ i. y1 T8 ]0 u/ r  ***异常产生时8 `& L' C/ b6 f. K/ m
  做好保护现场的工作:
, y: z1 P8 g: a, M4 R$ h  (1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断), G5 L! ?. z. X! W$ z* Y1 M
  (2)保存返回地址到lr
0 }2 J; T$ J* k0 ^! t" F- Q) z5 I  (3)设置pc为相应的异常向量# s) @9 C+ V& l6 [: G
  实现跳转。) a' r; Z. K& \7 g1 L( a+ ?
  ***异常返回时
3 ]( H# D& ^. z2 E, m& M! S! o5 V  做好恢复现场工作:
  P! }* q+ K$ ~: Q- o2 L  (1)从spsr恢复cpsr$ n# Y5 z2 B6 Q& s# U& Z0 x# X6 ~
  (2)从lr恢复pc1 \: o8 w8 b9 O1 h, d
  注意:这些操作必须在ARM状态执行" d8 N1 a: J" ]6 Q# r
  TIPS:
' m) U' j7 b! x6 X9 v, v6 S( d  (1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址* J  Y! u- z/ _4 i5 E  e6 i
  (2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了,加快了中断相应速度。- m, F7 X3 Y4 U3 F% L
9 K" ]6 Y3 U4 ^, C9 G  g& y
  • 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 05:50 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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