從編程的角度看,arm微處理器的工作狀態(tài)一般有兩種,并可在兩種狀態(tài)之間切換:
第一種為arm狀態(tài),此時處理器執(zhí)行32位的字對齊的arm指令;
第二種為thumb狀態(tài),此時處理器執(zhí)行16位的、半字對齊的thumb指令。
當arm微處理器執(zhí)行32位的arm指令集時,工作在arm狀態(tài);當arm微處理器執(zhí)行16位的thumb指令集時,工作在thumb狀態(tài)。在程序的執(zhí)行過程中,微處理器可以隨時在兩種工作狀態(tài)之間切換,并且,處理器工作狀態(tài)的轉(zhuǎn)變并不影響處理器的工作模式和相應(yīng)寄存器中的內(nèi)容。
狀態(tài)切換方法:
arm指令集和thumb指令集均有切換處理器狀態(tài)的指令,并可在兩種工作狀態(tài)之間切換,但arm微處理器在開始執(zhí)行代碼時,應(yīng)該處于arm狀態(tài)。
進入thumb狀態(tài):當操作數(shù)寄存器的狀態(tài)位(位0)為1時,可以采用執(zhí)行bx指令的方法,使微處理器從arm狀態(tài)切換到thumb狀態(tài)。此外,當處理器處于thumb狀態(tài)時發(fā)生異常(如irq、fiq、undef、abort、swi等),則異常處理返回時,自動切換到thumb狀態(tài)。
進入arm狀態(tài):當操作數(shù)寄存器的狀態(tài)位為0時,執(zhí)行bx指令時可以使微處理器從thumb狀態(tài)切換到arm狀態(tài)。此外,在處理器進行異常處理時,把pc指針放入異常模式鏈接寄存器中,并從異常向量地址開始執(zhí)行程序,也可以使處理器切換到arm狀態(tài)。