|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ARM的体系结构中,可以工作在三种不同的状态: , ]$ I# |. ]) S+ W* n; U- P
一是ARM状态 ARM:arm处理器工作于32位指令的状态,所有指令均为32位。 5 V/ [ d3 C% `# n* R" s5 R4 P
二是Thumb状态及Thumb-2状态
: t+ P5 |% y7 F4 c- y$ {: y Thumb: arm执行16位指令的状态,即16位状态。
) x8 z0 h: z# \' K M: n Thumb-2: 这个状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态上有所提升、优化。
& p' P" @ T$ A- Y& ~! n三是调试状态 处理器停机时进入调试状态。
! O( o/ d, A& L9 G0 Z6 d5 _5 [$ K% b1 t
(以下 lable 可以理解为一个函数名、或者一个跳转标志位——地址)由arm状态切换到thumb W. e) x( o. J. J( L- D
状态将寄存器的最低位设置为1
; y |+ j0 p* Q, _# g1 i3 s BX指令:R0[0]=1,则执行BX, K5 |% x: c- J& i% Q. U
R0指令将进入thumb状态 LDR R0,=lable+1 BX R0由thumb状态切换到ARM状态
" I$ n; L6 j3 z2 M 寄存器最低位设置为02 B& R7 X. |. ^4 ]
BX指令:R0[0]=0,则执行BX
+ j/ I7 _) N7 Q0 s4 Z) {" H% t R0指令将进入arm状态LDR R0,=lable BX R0
$ D7 i; F6 Q& i; V" n! P" a8 y0 {( K* i! J
无论是ARM还是Thumb,其指令在存储器中都是边界对齐的(2字节或者4字节对齐,最低位不起作用!)。因此,在执行跳转过程中,PC寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。
9 i, ]1 _0 n# |+ K. o$ E# y# Z# }当处理器进行异常处理时,则从异常向量地址开始执行,将自动进入ARM状态。
0 a5 T. l7 o2 Z1 d 注意:ARM处理器复位后开始执行代码时总是只处于ARM状态;6 J/ \: m( D [! R9 `2 V) o3 o' w
Cortex-M3只有Thumb-2状态和调试状
6 b- U; r3 e7 L2 ~; i9 `. M由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就无需Thumb了。! H# H! M, C' V: i4 K* J
另外,具有Thumb-2技术的ARM处理器也无需再ARM状态和Thumb-2状态间进行切换了,因为thumb-2具有32位指令功能。9 t2 ?0 G/ y6 S* C/ p+ B
总的说,arm状态与Thumb状态的本质区别就是指令的位数不同,arm是32位的指令状态,而thumb是16位 的指令状态,而thumb-2状态是arm状态和thumb状态的结合和优化。% D: l" u, d. G/ W" B( B; {2 {
$ u* m0 d; x- z. n9 b p4 F
$ h7 \- m* V' W/ ]: @9 Z: h0 |. O6 a8 o: J
|
|