arm處理器的工作狀態
在arm的體系結構中,可以工作在三種不同的狀態,一是arm狀態,二是thumb狀態及thumb-2狀態,三是除錯狀態。
《嵌入式系統開發與應用教程(第2版)》上介紹說:有兩種狀態arm狀態和thumb狀態,當時初學甚為不解,現在一知半解時再看忽然想到了顯示中的例子:
arm核就好比乙個高中學校,那種包含普通高中和職業高中的。普通高中就相當於arm狀態,職業高中就相當於thumb狀態,這樣還不能理解的話:可以認為 泡泡卡丁車 中普通模式和加速模式,,卡丁車加速要等到集氣管加滿,然後「ctrl」一下,就切換到了加速模式,氣放完了就又回來了,不管加速模式還是普通模式都是在跑,只是速度不一樣而已。
而arm狀態和thumb狀態可以直接通過某些指令直接切換,都是在執行程式,只不過指令長度不一樣而已。這個概念對初學者相當重要,因為當arm thumb是什麼還沒弄清楚,怎麼能理解兩種狀態呢?
他們之間的關係清楚了,這樣就可以深入了解arm狀態是什麼,thumb狀態是什麼了。
另外:arm的m系列主要用thumb指令,arm9和a系列主要用arm指令
s3c2440.s啟動**中根本就沒用thumb指令。
arm狀態此時處理器執行32位的字對齊的arm指令,thumb狀態此時處理器執行16位的,半字對齊的thumb指令。 切換程式:從arm到thumb: ldr r0,=lable+1 bx r0 從arm到thumb: ldr r0,=lable bx r0
1,arm狀態
arm處理器工作於32位指令的狀態,所有指令均為32位
2,thumb狀態
arm執行16位指令的狀態,即16位狀態
3,thumb-2狀態
這個狀態是arm7版本的arm處理器所具有的新的狀態,新的thumb-2核心技術兼有16位及32位指令,實現了更高的效能,更有效的功耗及更少地占用記憶體。總的來說,感覺這個狀態除了兼有arm和thumb的優點外,還在這兩種狀態上有所提公升,優化。
4,除錯狀態
處理器停機時進入除錯狀態。
5,arm與thumb間的切換
1,由arm狀態切換到thumb
狀態將暫存器的最低位設定為1
bx指令:r0[0]=1,則執行bx
r0指令將進入thumb狀態
2,由thumb狀態切換到arm狀態
暫存器最低位設定為0
bx指令:r0[0]=0,則執行bx
r0指令將進入arm狀態
當處理器進行異常處理時,則從異常向量位址開始執行,將自動進入arm狀態。
注意:arm處理器復位後開始執行**時總是只處於arm狀態;
cortex-m3只有thumb-2狀態和除錯狀態;
由於thumb-2具有16位/32位指令功能,因此有了thumb-2就無需thumb了。
另外,具有thumb-2技術的arm處理器也無需再arm狀態和thumb-2狀態間進行切換了,因為thumb-2具有32位指令功能。
總的說,arm狀態與thumb狀態的本質區別就是指令的位數不同,arm是32位的指令狀態,而thumb是16位 的指令狀態,而thumb-2狀態是arm狀態和thumb狀態的結合和優化。
thumb指令和arm指令
參考 一 為什麼乙個晶元需要thumb和arm兩套指令集 許多複雜的功能在複雜指令集 cisc 處理器上執行只需要單一的一條指令,即可,雖然可能有點慢,在精簡指令集處理器上可能需要多條指令,所以在精簡指令集 risc cpu上為了減少額外的指令對記憶體的消耗,考慮引入thumb指令集到處理器。現在最...
ARM指令與thumb 指令
1 thumb指令集概述 為相容資料匯流排寬度為16位的應用系統,arm體系結構除了支援執行效率很高的32位arm指令集以外,同時支援16位的thumb指令集。thumb指令集是arm指令集的乙個子集,是針對 密度問題而提出的,它具有16位的 寬度。與等價的32位 相比較,thumb指令集在保留32...
ARM指令和Thumb指令區別
thumb指令集 thumb 指令可以看做是arm指令壓縮形式的子集,是針對 密度 1 的問題而提出的,它具有16為的 密度。thumb不是乙個完整的體系結構,不能指望處理程式只執行thumb指令而不支援arm指令集。因此,thumb指令只需要支援通用功能,必要時,可借助完善的arm指令集,例如 所...