在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位指令的狀態,所有指令均為32位
arm執行16位指令的狀態,即16位狀態
這個狀態是arm7版本的arm處理器所具有的新的狀態,新的thumb-2核心技術兼有16位及32位指令,實現了更高的效能,更有效的功耗及更少地占用記憶體。總的來說,感覺這個狀態除了兼有arm和thumb的優點外,還在這兩種狀態上有所提公升,優化。
處理器停機時進入除錯狀態。
狀態將暫存器的最低位設定為1
bx指令:r0[0]=1,則執行bx
r0指令將進入thumb狀態
暫存器最低位設定為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狀態的結合和優化。
ARM狀態和Thumb狀態通俗理解
email baokang325 gmail.com blog kangear.blog.chinaunix.net 嵌入式系統開發與應用教程 第2版 上介紹說 有兩種狀態arm狀態和thumb狀態,當時初學甚為不解,現在一知半解時再看忽然想到了現實中的例子 arm核就好比乙個高中學校,那種包含普通...
ARM指令狀態切換到Thumb指令狀態
注意上面的中的黃色箭頭是我按單步執行後,按了一下後,箭頭所在的位置,這時的r15的值是0x00000004,表示正在執行的指令的位址,當r15的值為0x00000000時,黃色箭頭你說在 呢,當然是在ldr那條指令那裡了,並且表示ldr指令並沒有執行。請大家再看,r0的值為什麼是0x0000000d...
ARM指令狀態切換到Thumb指令狀態
注意上面的中的黃色箭頭是我按單步執行後,按了一下後,箭頭所在的位置,這時的r15的值是0x00000004,表示正在執行的指令的位址,當r15的值為0x00000000時,黃色箭頭你說在 呢,當然是在ldr那條指令那裡了,並且表示ldr指令並沒有執行。請大家再看,r0的值為什麼是0x0000000d...