ARM7 异常出/入口问题

[复制链接]
 楼主| ahyjj 发表于 2007-11-9 16:18 | 显示全部楼层 |阅读模式
关于异常的出/入口问题查看了《ARM体系结构与编程》杜春雷&nbsp;编著&nbsp;&nbsp;第1版,还不是很明白:<br /><br />第&nbsp;269&nbsp;页“IRQ和FIQ异常中断处理程序的返回”&nbsp;一节中很清楚的说明<br /><br />“当IRQ和FIQ异常中断产生时,程序计数器PC的值已更新,它指向指令后面第3条指令(对ARM指令来说,它指向当前指令地址加12个字节的位置;对THUMB指令来说,它指向当前指令地址加6个字节的位置)。当IRQ和FIQ异常中断发生时,处理器将值PC-4保存到异常模式下的LR_mode中。这时PC-4即指向当前指令后的第二条指令”&nbsp;&nbsp;&nbsp;<br /><br />1、为什么“这时PC-4即指向当前指令后的第二条指令”?对于THUMB指令&nbsp;应该是&nbsp;PC-2才对!&nbsp;<br /><br />2、返回时通过“SUBS&nbsp;PC,LR,#4”指令即可返回到中断发生时的下一条指令,而不用区分发生异常中断时是在ARM指令下还是THUMB指令下?&nbsp;<br /><br />请大家指教一二!<br /><br />
阿南 发表于 2007-11-9 18:49 | 显示全部楼层

建议楼主,写个程序段(或在现在的里头增加),

在仿真(或软件仿真)状态下,单步执行去验证.<br />这样,楼主也就学会了自己调试测试程序的方法,是必经之路.
 楼主| ahyjj 发表于 2007-11-11 01:02 | 显示全部楼层

RE

谢谢版主的提醒,这是ARM7内核的处理问题,做仿真是无法得出结果的呀!
xieqin 发表于 2007-11-12 10:21 | 显示全部楼层

...

For&nbsp;exceptions&nbsp;that&nbsp;occur&nbsp;in&nbsp;Thumb&nbsp;state,&nbsp;the&nbsp;handler&nbsp;return&nbsp;instruction&nbsp;(SUBS&nbsp;pc,lr,#4)<br />changes&nbsp;the&nbsp;program&nbsp;counter&nbsp;to&nbsp;the&nbsp;address&nbsp;of&nbsp;the&nbsp;next&nbsp;instruction&nbsp;to&nbsp;execute.&nbsp;Because<br />the&nbsp;program&nbsp;counter&nbsp;is&nbsp;updated&nbsp;before&nbsp;the&nbsp;exception&nbsp;is&nbsp;taken,&nbsp;the&nbsp;next&nbsp;instruction&nbsp;is&nbsp;at<br />(PC&nbsp;–&nbsp;4).&nbsp;The&nbsp;value&nbsp;stored&nbsp;by&nbsp;the&nbsp;processor&nbsp;in&nbsp;lr_mode&nbsp;is&nbsp;therefore&nbsp;PC.
 楼主| ahyjj 发表于 2007-11-13 16:36 | 显示全部楼层

re

我把问题细化一下还请各位多多指教!<br /><br />&nbsp;&nbsp;FX:&nbsp;&nbsp;在THUMB下,有如下一段汇编指令:&nbsp;&nbsp;&nbsp;&nbsp;I0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-〉I1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I4<br />如果当前指令流水线中&nbsp;I1处于执行状态&nbsp;&nbsp;I2处于译码状态&nbsp;I3处于取指状态&nbsp;&nbsp;则PC=I3地址<br /><br />此时FIQ(IRQ)到来时,内核会将I1执行完毕然后响应异常,I1执行完毕后PC已更新即PC=I4地址。<br /><br />根据《ARM体系结构与编程》及《ARM嵌入式基础教程》所述,内核紧接着内核做如下操作:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;LR,&nbsp;PC,&nbsp;#4&nbsp;&nbsp;&nbsp;;即将PC-4送入LR<br /><br />&nbsp;*//由于THUMB指令是&nbsp;16bit&nbsp;此时LR中保存的是I2地址*/<br /><br />&nbsp;异常返回时内核做如下操作:&nbsp;&nbsp;&nbsp;SUBS&nbsp;PC,LR,#4&nbsp;&nbsp;&nbsp;<br /><br />*//由于THUMB指令是&nbsp;&nbsp;16bit&nbsp;此时PC中得到的是I0地址,程序将从I0开始执行&nbsp;<br /><br />&nbsp;&nbsp;这就很奇怪了,异常返回后我们希望的是从I2开始执行的啊!<br /><br />---------------------------------------------------------------------<br /><br />&nbsp;&nbsp;如果在ARM状态下很好理解:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;LR,&nbsp;PC,&nbsp;#4&nbsp;&nbsp;&nbsp;;即将PC-4送入LR<br />*//由于ARM指令是&nbsp;32bit&nbsp;此时LR中保存的是I3地址<br /><br />&nbsp;&nbsp;&nbsp;异常返回时内核做如下操作:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBS&nbsp;PC,LR,#4&nbsp;&nbsp;&nbsp;<br />*//由于ARM指令是&nbsp;32bit&nbsp;此时LR中保存的是I2地址<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样恰恰是我们希望所得到的结果!!<br /><br />-------------------------------------------------------------------<br /><br /><br />&nbsp;我的问题不知道是否描述清楚,郁闷中ing.....................<br />
gqh 发表于 2007-11-14 17:22 | 显示全部楼层

关注

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

44

帖子

0

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

20

主题

44

帖子

0

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