Thumb指令集是ARM指令集中的一个子集,指令长度为16bit,使用Thumb指令集可以节省系统存储空间。所有的Thumb指令都有对应的ARM指令,Thumb的编程模型和ARM的编程模型相对应。且Thumb子程序和ARM子程序可以相互调用,但执行ARM程序段时,CPU处于ARM工作状态从;若执行Thumb程序段,则CPU处于Thumb工作状态。
打开一个MDK工程的MAP文件,可以发现大量的Thumb程序段。
Thumb指令的特点:
- 采用16位二进制编码,而ARM指令是32位的。
- Thumb是压缩指令,先动态解压缩,然后作为标准的ARM指令执行。
- 由CPSR的T位决定指令流。T置位,执行Thumb指令流,T清0,执行ARM指令流。
- 由ARM模式进入Thumb模式时,是显式或隐式的进入;由Thumb进入ARM模式时,也是显式或隐式的进入。
- Thumb指令集没有协处理器指令、信号量指令、乘加指令、64位乘法指令以及访问CPSR和SPSR的指令,而且指令的第2操作数受到限制。
- 除了分支指令B有条件执行功能外,其他指令均无条件执行。
- 大多数Thumb数据处理指令采用2地址格式。
Thumb状态切换
在任何时刻,CPSR的第5位(位T)决定了ARM微处理器执行的是ARM指令流还是Thumb指令流。当T置1,则认为是16位的Thumb指令流;当T清0,则认为是32位的ARM指令流。
- 进入Thumb模式
进入Thumb指令模式有两种方法:一种是执行一条交换转移指令BX,另一种方法是利用异常返回,也可以把微处理器从ARM模式转换为Thumb模式。 - 退出Thumb模式
退出Thumb指令模式也有两种方法:一种是执行Thumb指令中的交换转移BX指令可以显式的返回到ARM指令流。另一种是利用异常进入ARM指令流 。
Comments | 3 条评论
博主 Chise Hachiroku
那就是说,thumb指令的主要意义是通过缩小指令长度,压缩程序内存使用中指令部分的大小。
不过,"显式或隐式的进入"是什么意思呢……是处理器会识别到thumb或ARM指令后自动进入和退出,并且也可以通过特殊指令进入?
博主 Chise Hachiroku
欸这玩意原来能自动检测UA和IP嘛
博主 星空物语
@Chise Hachiroku 主题自带功能哈哈哈
(=・ω・=)