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

[复制链接]
2903|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

粉丝
快速回复 在线客服 返回列表 返回顶部