|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态: + g. ~1 y* v) y* W' u" k& Y
一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。 3 f! H8 }3 r9 S& y# ~& a; H. E
二是Thumb状态及Thumb-2状态
1 q: N* @0 G5 u. n: M Thumb: arm执行16位指令的状态,即16位状态。 4 U1 [% Z, U" O0 j1 j" z7 d* s
Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。 + X6 ~/ t& a8 W5 N/ o: X7 x( |
三是调试状态 处理器停机时进入调试状态。
4 N& ^; i2 G" b" p% d9 p! Y! ]1 B6 `1 c. W# Y
(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb6 t# b) r8 I4 J; m
状态将寄存器的最低位设置为1
) Y0 X. U8 W6 @. H5 }" K0 L BX指令:R0[0]=1,则执行BX' M& t! S- \. X9 C! n8 a3 C5 w$ L
R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态! c$ w% U" y# n! Z8 \* ^$ W, U% h7 l# g
寄存器最低位设置为0
9 Q7 y% N& g1 ?5 a. H V# Y BX指令:R0[0]=0,则执行BX f5 s) h9 H8 R1 x* k
R0指令将进入arm状态LDR R0,=lable BX R0* G, c: y- w+ G. R
0 X8 o" Q1 s, m. b: r5 S) V无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。
3 k' N+ \6 s# q) J4 s当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
: R: w9 Q9 v( ?# E. Z$ a$ Z# K" n V 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;
8 E q! }! {* R. t6 W Cortex-M3只有Thumb-2状态和调试状! n' c5 _# h8 ?, x' p
由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。" W( ?" o e4 N9 e& G4 V- G
另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。
0 P* A2 l) d8 a f$ ^: Q9 p* m 总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。
9 Z: N" \+ q1 z4 [3 J8 w
& | A/ ?1 J2 i" l3 H2 z0 b2 D; w6 c0 V( N% x& i0 G
' C& c, D3 d6 _# {8 X" [: K; Y* X
|
|