ARM异常中断以及对ARM异常返回地址的分析

ARM异常中断以及对ARM异常返回地址的分析

ID:38208675

大小:97.91 KB

页数:4页

时间:2019-05-27

ARM异常中断以及对ARM异常返回地址的分析_第1页
ARM异常中断以及对ARM异常返回地址的分析_第2页
ARM异常中断以及对ARM异常返回地址的分析_第3页
ARM异常中断以及对ARM异常返回地址的分析_第4页
资源描述:

《ARM异常中断以及对ARM异常返回地址的分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1、ARM7异常的分类异常类型具体含义复位(Reset)处理器的复位电平有效时,产生复位异常未定义指令当ARM处理器或协处理器遇到不能处理的指令时,产生未定义的指令异(Undefined)常,可使用该异常进行软件仿真软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指(SWI)令。可使用该异常机制实现系统功能调用。指令预取中止处理器试图去执行一条被标记为预取无效的指令时,将产生指令预取中(PrefetchAbort)止异常数据中止它由Load/Store产生,若处理器数据访问指令的地址不存在,或者是地(DataAbort)址不允许当前指令访问时,产生数据中止异常外部

2、中断请求当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ(IRQ)异常。系统的外设可通过该异常请求中断服务。快速中断请求当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ(FIQ)异常。2、各异常分析举个小例子,下面是一段ARM汇编代码:(后面的返回地址分析中将会用到此图)地址指令0x3000MOVr3,#10x3004MOVr0,#00x3008MOVr1,#10x300CMOVr2,#22、各异常发生时处理器的动作以及返回地址的计算复位异常:R14_svc=UNPREDICTABLEvalueSPSR_svc=UNPREDICTABLEvalu

3、eifhighvectorsPC=0xFFFF0000ElsePC=0x00000000复位异常是没有返回地址的,所以R14,SPSR寄存器中的值是不确定的,复位后程序从0x00000000或者是0xFFFF0000处开始执行。未定义指令异常:发生原因:当ARM处理器执行协处理器指令时,需等待外部协处理器响应后才能够执行指令,如果没有协处理器响应,未定义指令异常中断出现。(IftheARMprocessorexecutesacoprocessorinstruction,itwaitsforanyexternalcoprocessortoacknowledgethatitcanexecu

4、tetheinstruction.Ifnocoprocessorresponds,anUndefinedInstructionexceptionoccurs)//摘自ARMArcitectureReferenceManual(1)P57处理器动作伪代码:R14_und=addressofnextinstructionaftertheUndefinedinstruction.SPSR_und=CPSR….….IfhighvectorsconfiguredthenPC=0xffff0004;ElsePC=0x00000004;返回地址:MOVPC,R14返回地址分析:假设在执行地址为0x3

5、000处的指令时,由于ARM7是三级流水线结构,所以此时PC的值实际上为0x3000+8=0x3008,而当进入异常时ARM7处理器将R14_und中的值保存为addressofnextinstructionaftertheUndefinedinstruction,即R14_und=0x3004,既然是未定义的指令,若再返回到未定义指令处去执行,也没什么意义,所以返回地址设定在下一条待执行的指令处,而R14_und中存放的正是下一条待执行指令的地址,所以返回时直接将R14中的地址保存到PC中即可。软件中断异常:发生原因:由SWI指令执行时产生异常发生时处理器的动作:R14_svc=ad

6、dressofnextinstructionaftertheSWIinstructionSPSR_SVC=CPSR…..……IfhighvectorsconfigurethenPC=0xFFFF0008ElsePC=0x00000008返回地址:MOVSPC,R14返回地址分析:假设在执行地址为0x3000处的指令时,由于ARM7是三级流水线结构,所以此时PC的值实际上为0x3000+8=0x3008,而当进入异常时ARM7处理器将R14_und中的值保存为addressofnextinstructionaftertheSWIinstruction,即R14_und=0x3004,而软

7、件异常是因为当前指令即引起软件异常中断的指令执行后所引起的,说明当前指令已近执行,当从中断返回时,执行的指令应该是当前指令的下一条指令,即待执行指令的地址应该是0x3004,而R14中存放的即为0x3004,所以返回时使用将R14的值直接赋给PC即可。指令预期中止异常:发生原因:若在指令预取阶段遇到无效指令时,系统存储器将该预取的指令标记为无效指令,当处理器试图去执行这一条被标记为预取无效的指令时,将产生指令预取中止异常,注意若处理器没有执行无

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。