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

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

日志

Thumb转移指令之二

已有 368 次阅读| 2016-1-15 18:29

1.       B

分支指令。这是Thumb指令集中惟一可以条件执行的指令。

句法

B{cond}lable

B            lable

其中:lable是程序相对偏移表达式。通常是在同一代码内的标号。若使用cond,则lable必须在当前指令的-256~+256字节范围内;若指令是无条件的,则lable必须在±2KB范围内。

用法

cond满足或不使用cond,则B指令引起处理器转移到lablelable必须在指定范围内。ARM链接器不能增加代码来产生更长的转移。

例子

B            loop

BLT        sectB

2.       BL

带链接的长分支

句法

BL          lable

其中:lable为程序相对转移表达式。

用法

BL指令将下一条指令的地址拷贝到R14,并引起处理器转移到lableBL指令不能转移到当前指令±4MB以外的地址。必要时,ARM链接器插入代码以允许更长的转移。

例子

BL          subC

1.  BX

分支指令,并可有选择地切换指令集

句法

BX         Rm

其中:Rm装有分支目的地址的ARM寄存器。Rm的位[0]不用地址部分。若Rm的位[0]0.则位[1]也必须清0(因为在ARM状态下,地址是字对齐的,所以最后2位必须为00);指令清除CPSR中的标志T,目的地址的代码被解释为ARM代码。

用法

BX指令引起处理器转移到Rm存储的地址。若Rm的位[0]置位,则指令集切换到Thumb状态。若Rm的位[0]0,则指令集切换到ARM状态。

例子

MOV             R7to_Thumb+1

BX                R7                        ;R7的位[0]被置为1,所以指令集切换到Thumb状态。

BLX

带链接分支,并可有选择地交换指令集。

句法

BLX       Rm

BLX       lable

其中:Rm装有分支目的地址的ARM寄存器。Rm的位[0]不用于地址部分。若Rm的位[0]0,则位[1]也必须清0;指令清除CPSR中的标志T,目的地址的代码被解释为ARM代码。Lable是程序相对偏移表达式。“BLX lable”始终引起处理器切换到ARM状态。

用法

BLX指令可用于:

拷贝下一条指令的地址到R14

引起处理器转移到lableRm存储的地址;

如果Rm的位[0]0,或使用“BLX lable”形式,则指令集切换到ARM状态。

例子

BLX       R2

BLX       R0

BLX       armsub

指令不能转移到当前指令±4MB范围以外的地址。必要时,ARM链接器插入代码以允许更长的转移。这条代码的作用就是使Thumb采用2BLX指令组合成22位的半字偏移,最终使得指令范围为±4MB

注意:BLX指令只有V5T结构的ARM微处理器支持。

子程序调用及返回

ARMThumb状态下,通常用BL指令来调用子程序。在不同的情况下有不同的返回方法,如下所述:

如果子程序由相同的指令集调用,则它可用传统的BL调用,用“MOV  PC,R14或“LDMFD SP!,{…,PC}”返回。如果子程序由不相同的指令集调用,则可用“BX LR”或“LDMFD SP!,{…,rN};BX           rN”返回。支持V5T的结构的ARM微处理器也可用“LDMFD  SP!,{… ,PC}”返回,因为这些指令采用装载的PC值的最低位来更新Thumb标志位。早于V5T结构的微处理器不支持这样的用法。

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


点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

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

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

GMT+8, 2024-4-25 04:42 , Processed in 0.013839 second(s), 6 queries , Gzip On, Redis On.

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