在ARM ASM中如何检查引发的状态中断?

时间:2016-09-30 21:16:49

标签: assembly arm asmx interrupt thumb

在提升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 ;

1 个答案:

答案 0 :(得分:0)

您还没有指定您正在使用哪个版本的ARM指令集,但您几乎肯定会在保存的程序状态寄存器(SPSR)中找到它。

具体来说,您想知道T-bit的价值。

  

T位

     

T位反映了运行状态:

     
      
  • 当T位置1时,处理器正在Thumb状态
  • 中执行   
  • 当T位清零时,处理器在ARM状态下执行。
  •   
     

操作状态由CPTBIT外部信号反映。

除此之外,如果你试图从中断返回,通常不需要担心中断是来自拇指代码还是ARM代码。有一些特殊的中断返回指令可以为你处理。

在我工作的最后一个ARM平台上,您可以简单地执行movs pc, lr从中断返回,同时还恢复先前的执行状态。