ARM Thumb/ARM 狀態切換 代碼及分析

Thumb指令在相比於ARM指令具有更高的代碼密度,但是在運行效率上略低於ARM指令集,而且Thumb只是ARM指令集的一個子集。所有的ARM指令都是可以條件執行的,而Thumb指令僅有一條指令具備條件執行功能。所以很多應用程序需要兩者的混合編程,因此存在ARM與Thumb狀態之間相互切換,而且相互之間的狀態切換的開銷幾乎爲零。
ARM與Thumb之間的狀態切換通過專用的轉移交換指令BX來實現。BX指令以通用寄存器(R0~R15)爲操作數,通過拷貝Rn到PC實現絕對跳轉。BX利用Rn寄存器中目的地址值的最後一位判斷跳轉後的狀態。
下面是一段直接進行狀態切換的代碼:
CODE32                        ;程序從ARM狀態開始
   ADR r0, ThumbProg+1        ;跳轉到ThumbProg
   BX r0                      ;程序切換到Thumb狀態
 
CODE16                        ;Code16指示編譯器後面爲Thumb指令
ThumbProg
   MOV r2, #2
   MOV r3, #3
   ADD r2, r2, r3
   ADR r0, ARMProg
   BX r0                      ;跳轉到ARMProg,程序切換到ARM狀態
 
CODE32                        ;code32指示編譯器後面爲ARM指令
ARMProg
   MOV r4, #4
   MOV r5, #5
   ADD r4, r4, r5
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章