ARM與Thumb狀態(tài)切換及其代碼分析
ARM與Thumb之間的狀態(tài)切換通過(guò)專用的轉(zhuǎn)移交換指令BX來(lái)實(shí)現(xiàn)。BX指令以通用寄存器(R0~R15)為操作數(shù),通過(guò)拷貝Rn到PC實(shí)現(xiàn)絕對(duì)跳轉(zhuǎn)。BX利用Rn寄存器中目的地址值的最后一位判斷跳轉(zhuǎn)后的狀態(tài)。
下面是一段直接進(jìn)行狀態(tài)切換的代碼:
CODE32 ;程序從ARM狀態(tài)開(kāi)始
ADR r0, ThumbProg+1 ;跳轉(zhuǎn)到ThumbProg
BX r0 ;程序切換到Thumb狀態(tài)
CODE16 ;Code16指示編譯器后面為Thumb指令
ThumbProg
MOV r2, #2
MOV r3, #3
ADD r2, r2, r3
ADR r0, ARMProg
BX r0 ;跳轉(zhuǎn)到ARMProg,程序切換到ARM狀態(tài)
CODE32 ;code32指示編譯器后面為ARM指令
ARMProg
MOV r4, #4
MOV r5, #5
ADD r4, r4, r5
評(píng)論