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

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

2017-06-22
關(guān)鍵詞: 匯編語(yǔ)言

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

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

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

無(wú)論是ARM還是Thumb,其指令在存儲(chǔ)器中都是邊界對(duì)齊的,。因此,,在執(zhí)行跳轉(zhuǎn)過(guò)程中,PC寄存器中的最低位被舍棄,,不起作用,。在BX指令的執(zhí)行過(guò)程中,最低位正好被用作狀態(tài)判斷的標(biāo)志,,不會(huì)造成存儲(chǔ)器訪問(wèn)不對(duì)齊的錯(cuò)誤,。

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

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

CODE32                                                         ,;表明一下是ARM指令

       ADR       R0,Into_Thumb+1                    ,;得到目標(biāo)地址,,末位置1,表示轉(zhuǎn)移到Thumb

       BX         R0                                             ,;轉(zhuǎn)向Thumb

              …

CODE16                                                         ,;表明以下是Thumb指令I(lǐng)nto_Thumb

       …

       ADR       R5,Back_to_ARM                       ;得到目標(biāo)地址,,末位缺省為0 ,,轉(zhuǎn)移到ARM

       BX         R5                                             ;轉(zhuǎn)向ARM

       …

CODE32

       Back_to_ARM                                          ,;ARM代碼段起始地址


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