《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > ARM與Thumb之間的狀態(tài)轉換

ARM與Thumb之間的狀態(tài)轉換

2017-06-22
關鍵詞: 匯編語言

由于Thumb指令在某些特殊情況下可能比ARM指令更有效,,所以它在很多方面得到了廣泛的應用。但是Thumb知識ARM指令集的一個子集,,它不能獨立組成一個應用系統(tǒng),,所以在很多情況下應用程序需要二者的混合編程,這就必然存在ARM與Thumb狀態(tài)之間函數調用的問題,。下面將分別詳細介紹,。

1)      狀態(tài)切換的實現(xiàn)

ARM/Thumb之間的狀態(tài)切換是通過一條專用的轉移**指令BX來實現(xiàn)的。BX指令以通用寄存器位操作數,,通過拷貝Rn到PC來實現(xiàn)4GB空間范圍內的一個絕對跳轉,。BX利用Rn寄存器中目的地址值的最后一位來判斷跳轉后的狀態(tài)。當最后一位為0時,,表示轉移到ARM狀態(tài),;當最后一位為1時,表示轉移到Thumb狀態(tài),。

無論是ARM還是Thumb,,其指令在存儲器中都是邊界對齊的。因此,,在執(zhí)行跳轉過程中,,PC寄存器中的最低位被舍棄,不起作用,。在BX指令的執(zhí)行過程中,,最低位正好被用作狀態(tài)判斷的標志,不會造成存儲器訪問不對齊的錯誤,。

下面是一段直接進入狀態(tài)切換的例程:

                                                                      ,;從ARM狀態(tài)開始

CODE32                                                         ;表明一下是ARM指令

       ADR       R0,,Into_Thumb+1                    ,;得到目標地址,末位置1,,表示轉移到Thumb

       BX         R0                                             ,;轉向Thumb

              …

CODE16                                                         ,;表明以下是Thumb指令Into_Thumb

       …

       ADR       R5,Back_to_ARM                       ;得到目標地址,,末位缺省為0 ,,轉移到ARM

       BX         R5                                             ;轉向ARM

       …

CODE32

       Back_to_ARM                                          ,;ARM代碼段起始地址


本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點,。轉載的所有的文章,、圖片、音/視頻文件等資料的版權歸版權所有權人所有,。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者,。如涉及作品內容、版權和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]