DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1486|回复: 0
打印 上一主题 下一主题

[待整理] 跳转指令之:带状态切换的连接跳转指令BLX(1)

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-10 07:29:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
        8.3  带状态切换的连接跳转指令BLX(1)

        1.指令编码格式

        带连接和状态切换的跳转指令BLX(Branch with Link Exchange)使用标号,用于使程序跳转到Thumb状态或从Thumb状态返回。该指令为无条件执行指令,并用分支寄存器的最低位来更新CPSR中的T位,将返回地址写入到连接寄存器LR中。
         
        指令编码格式如图8.3所示。
       

        图8.3  BLX(1)指令编码格式

         
        2.语法格式

        BLX  <target_add>
         
        其中,<target_add>为指令的跳转目标地址。该地址根据以下规则计算。
         
        ① 将指令中指定的24位偏移量进行符号扩展,形成32位立即数。
        ② 将结果左移两位。
        ③ 位H(bit[24])加到结果地址的第一位(bit[1])。
        ④ 将结果累加进程序计数器PC中。
         
        计算偏移量的工作一般由ARM汇编器来完成。这种形式的跳转指令只能实现±32MB空间的跳转。
         
        左移两位形成字偏移量,然后将其累加进程序计数器PC中。这时,程序计数器的内容为BX指令地址加8字节。位H(bit[24])也加到结果地址的第一位(bit[1]),使目标地址成为半字地址,以执行接下来的Thumb指令。计算偏移量的工作一般由ARM汇编器来完成。这种形式的跳转指令只能实现±32MB空间的跳转。
         
        3.指令操作的伪代码

        指令操作的伪代码如下面程序段所示。
        第一种格式BLX指令。
         
        LR=address of the instruction after the BLX instruction
        T Flag=1
        PC=PC + PC = PC + (SignExtend(signed_immed_24)<<2) + (H<<1)
         
        4.指令的使用

        ·  从Thumb状态返回到ARM状态,使用BX指令。
         
        BX  r14
         
        ·  可以在子程序的入口和出口增加栈操作指令。
         
        PUSH  {<registers>,r14}
        ……
        POP  {<registers>,PC}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-14 14:46 , 耗时 0.088509 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表