ARM切换到THUMB模式,根据ARM的文档说是用一个跳转完成,并且跳转地址要存储在general register里,地址中最低位为1。我一向喜欢眼见为实。最简单就是看看编译后变成什么样子,下面是一个叫ab的函数,开thumb编译的,结果就变成了下面这样:
[c-sharp] view plain copy
- E28FC001 $Ven$AT$I$$ab: add r12,pc,#0x1
- E12FFF1C bx r12
- B510 ab: push {r4,r14}
- ...
- BD10 pop {r4,pc}
可以看见函数ab的正式开始之前,多了一段引入函数,或者说是thumb模式切换函数叫$Ven$AT$I$$ab,他做的动作就是如spec所说的事情。 armv5以上的也可以用BLX到thumb代码的地址来完成
|