从编程的角度看,arm微处理器的工作状态一般有两种,并可在两种状态之间切换:
第一种为arm状态,此时处理器执行32位的字对齐的arm指令;
第二种为thumb状态,此时处理器执行16位的、半字对齐的thumb指令。
当arm微处理器执行32位的arm指令集时,工作在arm状态;当arm微处理器执行16位的thumb指令集时,工作在thumb状态。在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
状态切换方法:
arm指令集和thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但arm微处理器在开始执行代码时,应该处于arm状态。
进入thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行bx指令的方法,使微处理器从arm状态切换到thumb状态。此外,当处理器处于thumb状态时发生异常(如irq、fiq、undef、abort、swi等),则异常处理返回时,自动切换到thumb状态。
进入arm状态:当操作数寄存器的状态位为0时,执行bx指令时可以使微处理器从thumb状态切换到arm状态。此外,在处理器进行异常处理时,把pc指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到arm状态。