在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 2091|回复: 0

[资料] Thumb指令集概述

[复制链接]
发表于 2016-1-11 16:32:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

ARM开发工具完全支持Thumb指令,应用程序可灵活的将ARMThumb子程序混合编程,以便在例程的基础上提高性能或代码密度。在编写Thumb指令时,先要用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,则可使用伪指令CODE32声明。与ARM指令集相比,Thumb指令集有如下特点:

采用16位二进制编码,而ARM指令是32位的。

由于是压缩的指令,在ARM指令流水线中实现Thumb指令时,先动态解压缩,然后作为标准的ARM指令来执行。

如何区分指令流取决于CPSR的第5位。若T置位,则认为是16位的Thumb指令,若T0,则认为是32位的ARM指令。

ARM模式进入Thumb模式时,是显式的的进入。所谓的“隐式的进入”就是说不执行交换转移指令,直接进入另一种模式。例如在异常状态下,由于Thumb指令不能处理异常,所以处理器自动转到ARM模式下执行。而“显式的进入”就是指使用交换转移指令来实现处理器模式的转换。

Thumb指令集没有协处理器指令、信号量指令、乘加指令、64位乘法指令以及访问CPSRSPSR的指令,而且指令的第2操作数受到限制。

除了分支指令B有条件执行功能外,其他指令均为无条件执行。

大多数Thumb数据处理指令采用2地址格式。

1.
Thumb指令集编码

Thumb指令集编码如图

1.jpg

2.
Thumb状态切换

支持Thumb指令的ARM微处理器都可执行标准的32ARM指令集。在任何时刻,CPSR的第5位决定了ARM微处理器执行的是ARM指令流还是Thumb指令流。若T1,则认为是16位的Thumb指令流;若T0,则认为是32位的ARM指令流。

(1)
进入Thumb模式

当系统复位后,ARM启动并执行ARM指令。进入Thumb指令模式有2种方法。一种是执行一条交换转移指令BX,将指令中的目标地址寄存器的最低位置置1,并将其他位的值放入程序计数器PC,则可进入Thumb指令。在此过程中由于指令引起了转移,这将刷新流水线,对已在流水线上的指令予以抛弃,不去执行它。例如:

BX         R0                 ;R0内容最低位为1,则转入Thumb状态

另一种方法是利用异常返回,也可把微处理器从ARM模式转换为Thumb模式。在这个过程中,ARM提供了2种机制;当返回地址保存在当前异常模式的R14时,采用传送指令;当返回地址保存在堆栈时,使用多寄存器加载/存储指令。值得注意的是,这两条指令用于返回到进入异常前所执行的指令流,而不是特地用于转换到Thumb模式。显然,这两条指令也改变程序计数器,并因此而刷新指令流水线。例如:

MOV             PC,R14                               ;用于子程序的返回

STMFD          SP!{<resisters>LR}          ;进入异常后将R14入栈,假设异常前执行的是


Thumb指令,且PC保存与R14

LDMFD         SP!{<resisters>PC}          ;与以上指令相匹配的返回指令

(2)
退出Thumb模式

退出Thumb指令模式也有2种方法:一种是执行Thumb指令中交换指令BX指令可以显式地返回ARM指令流;另一种是利用异常进入ARM指令流,因为异常总是在ARM模式下进行,所以,任何时候发生异常都能隐式的返回到ARM指令流。

3.
编程模型

Thumb指令集是ARM指令集的一个子集,并只能对限定的ARM寄存器进行操作。其编程模型如图所示

2.png

Thumb指令集对低8位通用寄存器R0~R7具有全部访问权限,对寄存器R13~R15进行扩展作为特殊应用。

R13用作堆栈指针SP

R14用作链接寄存器LR;

R15用作程序计数器PC

CPSR的条件标志位由算数和逻辑操作设置并控制转移。

图中有阴影的寄存器访问受到限制。除MOVADD指令访问寄存器R8~R15外,数据处理指令总是更新CPSR中的ALU状态标志。除CMP指令外,访问寄存器R8~R15Thumb数据处理指令不能更新标志。

作为堆栈指针的R13ARM代码中是纯粹的软约定,而在Thumb代码是某种硬件连接。

凌阳教育,专注嵌入式人才培养多年,完善的培养方案,强大的师资,合理的课程安排,成功从小白蜕变为嵌入式工程师。想了解凌阳教育,或者获得更多嵌入式学习资料的免费下载,请点击www.sunplusedu.com访问凌阳教育官网

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 01:52 , Processed in 0.026469 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表