|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态:
4 b9 V, I4 R% \; V2 U( l) y' ?; b一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。 ! f# S8 @7 q0 v ?8 g, S
二是Thumb状态及Thumb-2状态
: _3 }6 T: `7 w9 L Thumb: arm执行16位指令的状态,即16位状态。
% U' S" l" b% h6 P) k e- \ Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。 7 K/ w/ }& i, q/ U: [6 R8 M$ j- y& P' v
三是调试状态 处理器停机时进入调试状态。
5 B: |3 Q7 q" V; E
: p) [/ j8 h& F- a" L(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb G3 y; D, F% w2 d& e! X. m
状态将寄存器的最低位设置为14 }+ K& e$ H4 Y+ x* Y5 w
BX指令:R0[0]=1,则执行BX% O2 F. S' C5 S9 C ?
R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态/ o5 f& i1 |5 V1 L% @$ k
寄存器最低位设置为0
/ |! v2 Y2 L3 ] BX指令:R0[0]=0,则执行BX7 p% b% {% A* |$ J% z5 `* @
R0指令将进入arm状态LDR R0,=lable BX R0
) V9 |" t1 u3 P8 _( t3 R% F m% t" F5 L4 ?2 D& R
无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。
: E9 V( S2 ^2 a8 W6 r+ D" f+ \' h当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。( U. f1 y6 ~2 D6 k
注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;3 {7 X1 p4 V& f/ |8 b7 s2 W
Cortex-M3只有Thumb-2状态和调试状7 V0 K9 r: W8 k+ p
由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。& x V. f+ P8 O/ {+ H& r0 W* j
另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。2 H2 a+ l! q$ m0 a1 Z4 G
总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。
: W/ p- _, x' E- K2 U
2 u: H9 i+ s* K7 m' c- |1 N. t# F+ E
( q$ @7 H: @5 p4 m# n |
|