當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 入門指導(dǎo) > 嵌入式開發(fā)之a(chǎn)rm狀態(tài)和thumb狀態(tài)詳解
學(xué)習(xí)嵌入式開發(fā),那當(dāng)然會涉及到arm狀態(tài)和thumb狀態(tài),很多初學(xué)者對這兩個狀態(tài)一直不是很理解,都是一直處于迷茫中,今天我就用實際的例子來教給你,對于arm狀態(tài)和thumb狀態(tài)的學(xué)習(xí)。
我們首先先來清楚一下:arm處理器的工作狀態(tài)分為3種,一是:ARM狀態(tài),二是:Thumb狀態(tài)及Thumb-2狀態(tài),三是:調(diào)試狀態(tài)
對于arm狀態(tài)和Thumb狀態(tài)我們可以用一個簡單的比喻來先了解一下:我們可以把ARM核比作一個高中學(xué)校,那種包含普通高中和職業(yè)高中的。普通高中就相當(dāng)于ARM狀態(tài),職業(yè)高中就相當(dāng)于Thumb狀態(tài),這樣還不能理解的話:可以認為 泡泡卡丁車 中普通模式和加速模式,,卡丁車加速要等到集氣管加滿,然后“ctrl”一下,就切換到了加速模式,氣放完了就又回來了,不管加速模式還是普通模式都是在跑,只是速度不一樣而已。
而ARM狀態(tài)和Thumb狀態(tài)也是可以直接通過某些指令直接切換,都是在運行程序,只不過指令長度不一樣而已。這個概念對初學(xué)者相當(dāng)重要,因為當(dāng)ARM Thumb是什么還沒弄清楚,怎么能理解兩種狀態(tài)呢?通過上面的例子,我想大家都大概了解了ARM狀態(tài)和Thumb狀態(tài)的一些關(guān)系了吧,那么這樣就可以深入了解ARM狀態(tài)是什么,Thumb狀態(tài)是什么了。
另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令
S3C2440.S啟動代碼中根本就沒用Thumb指令。
ARM狀態(tài)此時處理器執(zhí)行32位的字對齊的ARM指令,Thumb狀態(tài)此時處理器執(zhí)行16位的,半字對齊的THUMB指令。 切換程序:從ARM到Thumb: LDR R0,=lable+1 BX R0 從ARM到Thumb: LDR R0,=lable BX R0
1,ARM狀態(tài)
arm處理器工作于32位指令的狀態(tài),所有指令均為32位
2,thumb狀態(tài)
arm執(zhí)行16位指令的狀態(tài),即16位狀態(tài)
3,接下來就是arm與thumb間的切換了,他們到底是如何切換的,這些是你需要掌握的
(1)由thumb狀態(tài)切換到ARM狀態(tài)
寄存器最低位設(shè)置為0
BX指令:R0[0]=0,則執(zhí)行BX
R0指令將進入arm狀態(tài)
當(dāng)處理器進行異常處理時,則從異常向量地址開始執(zhí)行,將自動進入ARM狀態(tài)。
(2)由arm狀態(tài)切換到thumb
狀態(tài)將寄存器的最低位設(shè)置為1
BX指令:R0[0]=1,則執(zhí)行BX
R0指令將進入thumb狀態(tài)
注意:ARM處理器復(fù)位后開始執(zhí)行代碼時總是只處于ARM狀態(tài);
Cortex-M3只有Thumb-2狀態(tài)和調(diào)試狀態(tài);
由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就無需Thumb了。
另外,具有Thumb-2技術(shù)的ARM處理器也無需再ARM狀態(tài)和Thumb-2狀態(tài)間進行切換了,因為thumb-2具有32位指令功能。
上面這些你都明白了嗎,其實總的來說,arm狀態(tài)和Thumb狀態(tài)的他們最根本的區(qū)別就是指令的位數(shù)不同而已,就像arm狀態(tài)是32位的,thumb是16位的,你只要把他們之間的這些東西都掌握好,那對你學(xué)習(xí)arm狀態(tài)和thumb狀態(tài)是很容易的,快快學(xué)起來吧!