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