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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[资料] Thumb转移指令之一

[复制链接]
发表于 2016-1-15 18:38:51 | 显示全部楼层 |阅读模式

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

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

x

ARM指令集中已介绍过多种形式的转移指令和转移链接指令以及用于ARMThumb状态切换的跳转指令。

ARM指令有一个大的偏移域,这不可能在16Thumb指令格式中表示。为此Thumb指令集有多种方法实现其子功能。

Thumb转移指令二进制编码如图所示。

22.jpg

转移指令的典型用法有:

短距离条件转移指令可用于控制循环的退出。

中等距离的无条件转移指令用于实现goto功能。

长距离的转移指令用于子程序调用。

Thumb指令集对每种情况采用不同的指令模式,分别如图所示。前2种转移格式是条件域和偏移长度的折中。第一种格式中条件域与ARM指令相同。前2种格式的偏移值都左移一位,以实现半字对齐,并符号扩展到32位。格式中,Thumb采用2种这样格式的指令组合成22位半字偏移并符号扩展为32位,使指令转移范围为±4MB。这是因为专一指令链接子程序通常需要一个大的范围,很难用16位指令格式实现。为了使者2条指令相互独立,使它们之间也能响应中断等,所以将链接寄存器LR作为暂存器使用。LR在这2条指令执行完后会被覆盖,因此LR中不能装有有效内容。这个指令对的操作为:

(H=0)            LR<-PC+(偏移量左移12后符号扩展至32)

(H=1)            PC<-LR+(偏移量左移1)LR<-oldPC+3

这里,oldPC是第2条指令的地址;加3使产生的地址指向下一条指令并且使最低位置位以指示这是一个Thumb程序。用格式(3a)的指令代替上面的第2步就可实现BLX指令。格式(3a)只在V5T结构中有效。它使用与上面的BL指令同样的第1步:

BLH=0       LR<-PC+(偏移量左移12后符号扩展至32位);

BLX              PC<-LR+(偏移量左移1)&0xFFFFFFFCLR<- oldPC+3,清Thumb指示位。

应注意,该形式的指令转移的目标是ARM指令,偏移地址只需要10位,而且必须对PC值的位1进行清0操作。格式(4)直接对应ARM指令B{L}X,不同之处是,BLX指令中R14值为后续指令地址加1,以指示是被Thumb代码调用。指令中H1时,选择高8个寄存器(R8~R15)。

汇编格式

B                   <cond><lable>       ;格式(1
目标位Thumb代码

B                   <lable>                 ;格式(2
目标为Thumb代码

BL                 <lable>                 ;格式(3
目标为Thumb代码

BLX              <lable>                 ;格式(3a
目标为ARM代码

B{L}X           Rm                       ;格式(4
目标位ARMThumb代码

转移链接产生两条格式(3)指令。格式(3)指令必须成对出现而不能单独使用。同样,BLX产生一条格式(3)指令和一条指令(3a)指令。汇编器根据当前指令地址、目标指令标识符的地址以及对流水线行为的微调,计算出应插入指令中相应的偏移量。若转移目标不在寻址范围内,则给出错误信息。

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

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

本版积分规则

关闭

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


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

GMT+8, 2025-1-10 20:28 , Processed in 0.019445 second(s), 8 queries , Gzip On, Redis On.

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