arm 工作模式 寄存器组织

工作模式  svc   usr/sys  IRQ  FIQ   ABT   UND

异常模式   svc IRQ  FIQ ABT  UND

usr 为非特权模式,其他的都是特权模式
特权模式可以进入usr模式,usr进入特权模式不容易,只能通过swi(软件中断)
进入svc模式

寄存器组织

37个寄存器(31个通用的,6个状态的)
通用寄存器 :


 

arm 工作模式 寄存器组织 - 北极星 - 北极星

  

r0-->r7 为各个模式通用

r13 (sp)栈寄存器
r14  (lr)连接寄存器,保存下一条地址(bl 跳转是用,异常时跳到异常向量表时)
r15  pc 程序计数器;一般在当前执行指令的下两条指令的地址
cpsr  低五位表示当前工作模式,d3 svc ,d2 IRQ,d0 usr,最高位N(negtive)Z(zero)C(carry 借位)V( overflow 溢出)
      中间还有 I ,F: IRQ FIQ的disabble,还有ARM thurb切换


 

arm 工作模式 寄存器组织 - 北极星 - 北极星

  

spsr  cpsr的备份  movs pc ,rn   可以将spsr给cpsr ;

ARM的异常处理

异常 七种异常 ,五种异常模式
 不同异常进入不同异常模式
 异常触发(如软件中断使用swi指令),
 异常响应(保存模式spsr和地址lr,修改模式,修改pc),
异常向量表(开始32个字节七个入口(0x14预留) ,
现场保存,返回(模式和地址同时返回)
       


lr(r14)的作用问题,这个lr一般来说有两个作用:
1.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。
2.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。

另外注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用mov pc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值