0
在引发SWI中断后的ARM ASM编程中,如何检查是否从ARM状态或THUMB状态升高?在ARM ASM中如何检查引发哪个中断状态?
LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT
SWI 0X1240 ;
在引发SWI中断后的ARM ASM编程中,如何检查是否从ARM状态或THUMB状态升高?在ARM ASM中如何检查引发哪个中断状态?
LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT
SWI 0X1240 ;
您还没有指定哪个ARM指令的版本设置你使用,但
你几乎肯定会发现它在保存的程序状态寄存器(SPSR)。
具体来说,你想知道T-bit的价值。
T位
T位反映了操作状态:
- 当T比特被设置,则处理器在Thumb状态
- 执行当T位是清楚,处理器在ARM状态下执行。
运行状态由CPTBIT外部信号反映。
就像旁边一样,如果您尝试从中断返回,您通常不需要担心中断是否来自拇指代码或ARM代码。有特殊的中断返回指令,应该为您处理。
在最后的ARM平台,我的工作,你可以简单地做movs pc, lr
从中断返回,同时恢复先前的执行状态。
使用lpc2378的进程 – tracy00
它唯一的例外是_does_,它来自哪个状态,是一个未定义的指令,其中LR偏移量是来自ARM的+4而来自Thumb的+2。对于其他任何情况,LR偏移量完全取决于异常类型(特别是对于SVC,确实为0)。 – Notlikethat