IRQ.s的理解

开始看IRQ.s,有个问题没明白,自己静下心来到网上找资料慢慢理解方才彻悟!把网上的资料整理写写自己的
心得,哈哈!网络万岁!

先列出程序详单

MACRO

$IRQ_Label HANDLER $IRQ_Exception_Function

 EXPORT  $IRQ_Label

 IMPORT  $IRQ_Exception_Function    

$IRQ_Label

 SUB     LR, LR, #4

  STMFD   SP!, {R0-R3, R12, LR} 

 MRS R3,SPSR

 STMFD SP,{R3,LR}^

 NOP

 SUB SP,SP,#4*2

 MSR CPSR_C,#(NoInt|SYS32Mode)

 BL $IRQ_Exception_Function

 MSR CPSR_c,#(NoInt|IRQ32Mode)

 LDMFD SP,{R3,LR}^

 MSR SPSR_cxsf,R3

 ADD SP,SP,#4*2

 LDMFD SP!,{R0-R3,R12,PC}

MEND

开始会对STMFD   SP!, {R0-R3, R12, LR}  和 STMFD SP,{R3,LR}^感到疑惑,为什么STMFD   SP!, {R0-R3,

R12, LR}已经把LR压栈了怎么后面又保存一次呢?其实有这个疑惑的一般是对"^"理解不是很深。好,现在来说

说"^"这个吧。使用"^"后缀进行数据传送且寄存器列表不包含PC时,加载/存储的是用户模式的寄存器,而不是

当前模式的寄存器。显然这里两次保存的LR是不一样的,第一个是当前模式下的lr,而后面的则是保存用户模式

的lr。这样就很明白了吧!嘻嘻!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值