|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态:
1 k& E6 c' p, O; ^4 L8 ^7 r" Q一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。 7 h0 C+ k. n( r& |8 u h4 B
二是Thumb状态及Thumb-2状态 5 ?: D7 g6 D; Y4 G! L: E& p. h3 T
Thumb: arm执行16位指令的状态,即16位状态。
8 h7 T- E( C7 r% i- i8 x& G# S! B Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。
0 H' Q6 s8 V" U$ O0 B/ ^9 N三是调试状态 处理器停机时进入调试状态。
& l1 {# B+ B9 }# A; p, n4 F p8 H: `( n
(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb
$ g6 X; Y( p8 x4 F8 y9 v 状态将寄存器的最低位设置为1
* L0 x% R/ J' W BX指令:R0[0]=1,则执行BX
+ L7 }0 _6 t% T9 ^3 N0 n3 o R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态% B5 a* S' a+ C$ Y0 J% R% m, y
寄存器最低位设置为0
- X7 N0 [/ Y! j3 x BX指令:R0[0]=0,则执行BX
" M" k& U0 C2 C* V* N R0指令将进入arm状态LDR R0,=lable BX R0, C; w: D" Z, n: R0 B- w
3 e. c/ _9 G1 `( J. h, M1 o
无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。$ b f$ R" |4 j1 H
当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
! z( m; p: O" a, a 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;' b1 p8 J4 R$ m: [' r
Cortex-M3只有Thumb-2状态和调试状, F! H" ]0 A! e1 H: a
由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。. b: A1 l$ D+ h
另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。( C3 c1 I- O# ^) p6 d, ]
总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。
& m' a" D( i( u
9 f" j G4 L, `+ ^3 X* h) R& s8 b& r! ~& G8 b6 b* }
+ S6 B P. v1 ~ _- I- y8 \
|
|