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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
ARM 有7个基本工作模式
8 T! u% q+ e* w& E  User : 非特权模式,大部分任务执行在这种模式% ]/ H. u; r3 D+ ^8 |3 ]3 P
  FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式/ H2 q* k6 ^$ ?$ S! d8 A! A6 o* F* I: f) F
  IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
) w" _  K" O% Y- b) u5 H: L3 |) b  Supervisor :当复位或软中断指令执行时将会进入这种模式
& T* W: Y8 ?3 j( S4 `- F( H5 h" X  Abort : 当存取异常时将会进入这种模式  z1 p+ ^: i6 P9 L/ n. a) |9 [! X7 `/ z
  Undef : 当执行未定义指令时会进入这种模式
6 l( H/ o% G" O6 p! j" Z  System : 使用和User模式相同寄存器集的特权模式
0 F) e7 {" I; ~4 ]. x" r* U  注意:除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。 Privilege中除Sys模式外,其余5种为异常模式。 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。 各种模式下权限和可以访问的寄存器不同。
( D& ^! j; k) n1 w1 t  非特权模式:User+ ^6 j& n+ Y0 c* S! {% [
  特权模式:% Z( ]3 o7 I5 K" O$ V9 D# `
  异常模式:FIQ IRQ Svc Abort Udef
; P  c0 }+ e. S0 y+ n2 k  非异常模式:System  Monitor; ^- f& i7 D$ t# I& X1 m
, |& E( c1 O0 l0 T

# c7 S- E( a4 M6 O

+ L3 x; L7 g% i' ZARM寄存器分析
$ ]6 C2 ^: G- O% G" Y3 d  ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR,5个固定用作5种异常模式下的SPSR。
: [. [+ E& R4 Y4 |8 T1 ~& p  r13(sp)用作堆栈可以保存上下文,便于以后跳转回来能继续执行
/ h9 H* M0 Y% }0 Q7 F" |  r14(lr)用于存储返回地址,当我们返回原模式可以bl lr或者mov pc lr这样就实现了返回
. X- D' `* M7 i  r15(pc):程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)
) C- a$ p& a) S  cpsr:中各个bit位表明了cpu的某些状态信息,这些信息非常重要,和后面学到的汇编指令息息相关(譬如BLE指令中的E就和
- ^' H" R# m, C  I/ O  CPSR中的Z标志位有关) cpsr中的I、F位和开中断、关中断有关 cpsr中的mode位(bit4~bit0共5位)决定了CPU的工作模式,
' s+ r# s, y2 t& Z+ J; q8 q2 r  在uboot代码中会使用汇编进行设置。8 Q( Z* ^5 _: `( i; ^7 F! L0 J
  spsr:用来保存cpsr
$ Y/ _/ l& [- M2 @5 g
/ [" S$ E8 N; v
0 J  L9 d% m) D# l) I& E

3 c1 F* f. y: r  U# R- s& @, z; ~! a
/ R: w5 U0 o2 [5 {$ m1.条件标志位8 P) j% u& {- R+ d9 G+ o: N
  -N: Negative result from ALU
9 |/ W: U; F7 d5 s- B  -Z: Zero result from ALU: u2 L2 u! D: O; Y* }3 [9 j
  -C: ALU operation Carried out (进位/借位)7 |5 M) p0 T8 |
  -V: ALU operation oveRFlowed (溢出)3 }; V! H9 R/ D& v. ^
  * N=1时,说明运算的结果为负数,N=0时,说明运算的结果为正数或零。" I% B0 L9 l' A& I9 D" @8 u
  * Z=1时,说明运算的结果为0,Z=0时,说明运算的结果为非0。2 Y: a1 n" l* p
  * C:7 M2 g2 z: ?$ s, ?
  - 加法运算(包括CMP):当运算结果产生了进位时(无符号数溢出),C=1,否则为0。5 W* n" T& a" C7 M, M
  - 减法运算(包括CMP):当运算结果产生了借位时(无符号数溢出),C=0,否则C=1。, e; X' L2 ], b& D" G
  - 对于包含移位操作的非加减指令操作时,C为移除值的一位。
% _# b4 y0 Y! u0 Z( Y; g( p1 M  - 对于其它的非加减指令,C的值通常不变。
; H( e* R7 z( o8 p& y; T% m0 L  * V:
; ?' C5 @+ p: c# K3 r) M4 g6 W  - 对于加减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出
, Z% O% q2 u; J# T8 ^  - 对于其它的非加减法指令,V的值通常不变。
  e! p3 A9 `' {; K, ?  2.Q位:7 |9 W4 Z3 a" k: D: P
  * 在ARM V5及以上的版本的E系列处理器中,Q标识位指示增强的DSP运算指令是否发生了溢出,在其它版本的处理器中,Q未定义。
( g, ~4 f/ r2 l5 t( R+ @0 y  3.J位:
9 G# F1 S9 x$ G& W8 s/ C) r! `: c$ B  * 仅ARM 5TE/J 架构支持, I  k9 U7 m! }, p1 w; R, V
  * J=1时,处理器处于Jazelle状态
, m7 |( Y5 m. r' }: @1 c" E! V  跳转过程
2 t0 B7 H& K  {& d- j  异常向量表
8 w# }5 F& X) h: T$ W  所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常,有时伴有一些辅助动作) 异常向量表是硬件向软件提供的处理异常的支持。
9 f/ D1 F0 U6 D/ S; |2 ]; z: q  ***异常产生时% J4 A( h1 u) j8 S& W5 i9 e1 {8 Z' M
  做好保护现场的工作:: _' N' l$ ?* Z" X. O/ i
  (1)把cpsr保存到spsr中,设置适当的cpsr(改变处理器的ARM状态、改变处理器进入相应的异常模式、(视情况)改变中断禁止位禁止相应中断)
" m8 ~' [1 ]0 R$ L  (2)保存返回地址到lr
% E# T5 v' E% x+ i  (3)设置pc为相应的异常向量
2 b  {/ v$ c5 l$ }; E: N$ m1 J) q  实现跳转。
5 w4 K' Y' j7 H/ z1 b  ***异常返回时
: G0 j5 a$ {9 p5 Z0 ~( l3 I  做好恢复现场工作:
$ U! R. u2 x- G3 u1 z9 q  (1)从spsr恢复cpsr
7 Q$ R1 j0 H- F, F" ]( h9 P  (2)从lr恢复pc
0 M3 m6 p; w) n# b3 R! s  注意:这些操作必须在ARM状态执行: y4 E+ D0 W) T+ n: m6 U+ Z
  TIPS:
7 ?4 h' I2 I( l' b  (1)异常向量表中除了FIQ中断都是4个字节,所以只够存放一段异常处理程序的代码的首地址6 `) I7 @& N! u0 g
  (2)FIQ中断为快速中断,其中一个特殊的地方就体现在他的异常向量表(Vector Table)地址在一个,所以它可以存放不止4个字节,这样的话FIQ中断可以不用只存放地址,而是把整个异常处理程序放进去,这样就少跳转了,加快了中断相应速度。# I. |! @/ L3 f0 A4 W

4 M( u" y8 [; _4 r2 M
  • TA的每日心情
    慵懒
    2025-11-24 15:04
  • 签到天数: 424 天

    [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 20:28 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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