在提升SWI中断后的ARM ASM编程中,如何检查它是否从ARM状态或THUMB状态引发?
LDR R11,=DST
LDR R12,=0X4000100 ;THIS IS FOR STORING THE ADDRESS
LDR R1,=0X4000200 ;THIS IS FOR STORING THE COUNT
SWI 0X1240 ;
答案 0 :(得分:0)
您还没有指定您正在使用哪个版本的ARM指令集,但您几乎肯定会在保存的程序状态寄存器(SPSR)中找到它。
具体来说,您想知道T-bit的价值。
T位
T位反映了运行状态:
- 当T位置1时,处理器正在Thumb状态
中执行- 当T位清零时,处理器在ARM状态下执行。
操作状态由CPTBIT外部信号反映。
除此之外,如果你试图从中断返回,通常不需要担心中断是来自拇指代码还是ARM代码。有一些特殊的中断返回指令可以为你处理。
在我工作的最后一个ARM平台上,您可以简单地执行movs pc, lr
从中断返回,同时还恢复先前的执行状态。