|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态:
, k/ M' w- j1 M5 k+ B$ k# ]6 B( F一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。
* {3 U( R, F! A, Z' h# R2 @二是Thumb状态及Thumb-2状态
, B0 E8 M2 z4 w& {7 N } Thumb: arm执行16位指令的状态,即16位状态。 * o) Z1 H& a& a4 g. Y
Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。 5 H& m, H4 R& a. a9 h$ L
三是调试状态 处理器停机时进入调试状态。5 `3 c: s2 J7 I9 ~0 M7 o U
: \- v) Z; G7 t
(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb3 b# F- R+ o% v" X# ~2 w
状态将寄存器的最低位设置为1
, |( \% @' s- X BX指令:R0[0]=1,则执行BX
: c" p, Z' z* m. E R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态: L" M4 u# j& n0 H1 C6 y
寄存器最低位设置为0- J e4 `- [: v- _& S/ E
BX指令:R0[0]=0,则执行BX
+ C1 X5 H! Y% f( {3 j: X R0指令将进入arm状态LDR R0,=lable BX R0
; T2 \9 L* d9 y8 h' U8 F
- K8 c- U5 Z+ e u$ o无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。
$ m `) S+ o! X, y- e当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
4 ^# p$ z6 a7 {6 u 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;+ J7 s1 }7 k/ ^1 E
Cortex-M3只有Thumb-2状态和调试状
' T) O3 w7 k' n# v& C0 A由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。0 z9 f" `2 y6 }$ k
另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。% y5 i9 c2 \" Z) p' v
总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。4 V, K: {0 ]1 X3 t+ Q
$ m0 a M. h1 Y
# _! [ V7 U& y" x, l8 Q3 W: `5 X9 R. S5 l7 Z
|
|