打印

问个ARM中断偏移量的小问题!

[复制链接]
2230|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2010-11-10 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM的异常模式是由异常事件引起的。ARM在进入相应的模式前要把PC值保存到LR中,但是这个PC值并不是一定是程序放回时的地址值,有的情况有偏移量。

BL调用时,可以直接返回;
SWI :可以直接返回LR;
位定义指令:可以直接返回LR;
预取指中止:返回值LR-4
快速中断: 返回值LR-4
IRQ中断:返回值LR-4
数据中止:放回值LR-8

ARM7是3级流水线作业,取指,译码,执行。。。所以每次在执行指令时,当前的PC是取指的PC,即PC比当前执行代码时的PC值要多8个地址。。。。。


ARM在执行跳转后(PC的值是没有按顺序执行),预取的指令会被丢弃的。


如果我们用BL来调用其他指令段,pc的值一直被+4,当指令执行到BL LABEL时,PC的值应该是这条语句当前的PC+8,即是该语句后第2条语句处的地址。要跳转,先要把当前的PC值保存到LR中。再改变PC的值,使其转到标号LABEL处执行,先前的预取指令被丢弃,重新开始预取。当调用的程序段执行完后(现在还不知道怎么判断调用的程序结束,好像是没有相关的伪指令,可能是根据下一个标号来判断),返回时把LR的值(或-4,或-8,不同异常不同)再赋给PC,返回到调用前的下调指令执行。


安装上面的分析,应该是不能够返回到下条指令的。。。。。。。。。PC值是被加8,但是为什么不同情况保存PC到LR时,好像根本不是保存当前PC+8的值,不知道ARM到底是怎么处理的????好多的书本都介绍的不详细,希望各位大侠能给点指导!!!

相关帖子

沙发
ayb_ice| | 2010-11-10 15:39 | 只看该作者
就是流水线引起的,与内核息息相关,
没有什么好分析的,记住就行了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

127

主题

728

帖子

0

粉丝