|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态: 8 N8 R4 Q6 C' h% Q0 r
一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。
* M- ?7 @& b' f# e! |- e# F6 b二是Thumb状态及Thumb-2状态
! g; E$ E. e8 ]9 H' _: U: Q Thumb: arm执行16位指令的状态,即16位状态。 / i4 c- E& ?# J
Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。 ( f, \' f M; C6 ]( u. A0 x
三是调试状态 处理器停机时进入调试状态。
* K( V' W% z# ?% _
% @& G5 y' U7 P# N- E+ A' `* _# r6 q7 Q(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb
9 Q& a/ N8 r' M0 m- U) \- W 状态将寄存器的最低位设置为1. R" s+ v" C; G5 ~% a R
BX指令:R0[0]=1,则执行BX
8 x1 F& o: N$ c3 B o m R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态 ]% {8 k3 g- V: w- F
寄存器最低位设置为0 Z8 l5 b) U9 v6 O* J7 v* U. R8 p2 B
BX指令:R0[0]=0,则执行BX4 P* ?8 p- E0 y
R0指令将进入arm状态LDR R0,=lable BX R0: |/ p) |( F3 T; Z& C" z! X
8 w$ R$ ?, P p7 {9 m! D
无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。
5 ?5 k& F! M* y5 q当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
! f% w" \* H1 [- _+ S% ]' D& O( I 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;
4 F+ G' Z1 y% c/ Y! l$ p2 M Cortex-M3只有Thumb-2状态和调试状
. u5 X8 f% p) R( ?# j$ G由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。
s3 V( V) W% t: Z7 m5 Z8 n另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。! T! x9 O0 x. K3 P+ W- ?% _
总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。- [7 r+ s* A/ A- m1 ] A
$ {6 b- f: S* I+ ]) I3 k7 Z
5 |% O, n0 b0 ~) g, Y4 G; `
" v' \; N" @, [& \# h |
|