Chinaunix

标题: 请问,异常的返回地址,为什么有的减4,有的减8,有的不减? [打印本页]

作者: liuqionline    时间: 2012-03-26 15:51
标题: 请问,异常的返回地址,为什么有的减4,有的减8,有的不减?
减4的,FIQ和IRQ,可以理解,因为PC提前8,恢复的时候减去4,正好是下一条指令的地址。
可是,软中断的指令的返回地址,为什么是 R14,返回指令: movs pc,r14_svc
为什么不减呢?
取数中止为什么返回地址是 R14-#8 ?这不是回到原指令了吗?

Orz
作者: 暴风lay    时间: 2012-03-28 16:27
fiq,irq,中断发生时,程序计数器pc的值已经更新,它指向当前指令后面的di3条,中断发生后,cpu将(pc-4)保存到lr中,(pc-4)指向当前指令后的第二条,所以中断处理返回操作是:SUBS PC,LR,#4.(你这个就已经理解错了)
SWI:当swi发生时,pc的值还未更新,指向当前指令后的第二条,中断发生后,cpu将(pc-4)保存到lr中,返回式:mov pc,lr
数据访问中止异常:中断发生时,pc已经更新,指向当前指令第三天,但不同的是:数据访问中断处理完后要返回到当前发生中断的指令出,所以。。。

看到你的问题,准们看了下书,哈哈
作者: liuqionline    时间: 2012-03-29 10:17
暴风lay 发表于 2012-03-28 16:27
fiq,irq,中断发生时,程序计数器pc的值已经更新,它指向当前指令后面的di3条,中断发生后,cpu将(pc-4) ...


Orz
膜拜




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2