凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Thumb指令集概述

已有 1091 次阅读| 2016-1-11 16:22

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指令集编码如图

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寄存器进行操作。其编程模型如图所示

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访问凌阳教育官网


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

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

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

GMT+8, 2024-4-26 15:35 , Processed in 0.018283 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部