当前位置: 首页 > news >正文

跳转指令介绍

1、跳转指令简介

        在C程序中,函数A调用函数B的实质是什么?实质是:跳转去执行函数B的代码,函数B执行完后,还要返回到函数A继续执行后面的代码。对应的汇编指令就是跳转指令。

void   A()
{int a = 10;B(a);printf(“ok”);
}

2、指令语法及使用

2.1、指令简介

        核心指令是B、BL,变种指令有BX和BLX。

  • B:Branch,跳转
  • BL:Branch with Link,跳转前先把返回地址保持在LR寄存器中
  • BX:Branch and eXchange,根据跳转地址的BIT0切换为ARM或Thumb状态(0:ARM状态,1:Thumb状态)
  • BLX:Branch with Link and eXchange,根据跳转地址的BIT0切换为ARM或Thumb状态(0:ARM状态,1:Thumb状态)

2.2、B指令

        B(分支)指令将程序执行转移到由标签指定的地址。

(1)语法

B{cond}{.W} label
  • cond是指令执行的条件代码,例如BNE,是不相等的条件,需要状态寄存器的Z等于0。Z等于0表示不相等,才执行跳转。

2.3、BL指令

(1)语法

BL{cond} label

2.4、BX指令

        BX(分支与交换)指令将程序执行转移到寄存器中指定的地址。BX 可以将核心状态从 ARM 更改为 Thumb,或者从 Thumb 更改为 ARM。BX Rm 将根据 Rm 的第 0 位设置状态:

  • Rm bit[0] = 0 ARM state.
  • Rm bit[0] = 1 Thumb state.

(1)语法

BX{cond} Rm

2.5、BLX指令

(1)语法

BLX{cond} label
BLX{cond} Rm

3、示例代码

(1)示例1

    B		Delay   ;跳转到Delay标签执行程序;标签Delay
DelayMOV		R0, #1000    ;R0 = 5LoopSUBS    R0, R0, #1  ; R0 = R0-1,S表示需要更新状态标志;R0减到等于0时,零标志Z置1BNE		Loop        ;B表示跳转指令,NE是条件代码(Z=0)MOV		R1, #1      ;循环结束,R1 = 1

(2)示例2

		BL		Delay     ; 跳转前把返回地址保持在LR寄存器里MOV		R1, #1
DelayMOV		R0, #5
LoopSUBS	R0, R0, #1BNE		LoopMOV		PC, LR    ; 把LR赋给PC,返回

(3)示例3,直接给PC赋值实现跳转

ADR指令参考文章

		ADR		LR, Ret    ; 伪指令,读取Ret标号的地址赋给LR,这是返回地址ADR		PC, Delay  ; 伪指令,读取Delay标号的地址赋给PC,直接跳转
RetMOV		R1, #1
DelayMOV		R0, #5
LoopSUBS		R0, R0, #1BNE		LoopMOV		PC, LR    ; 把LR赋给PC,返回

参考资料:

  • 《DEN0013D_cortex_a_series_PG.pdf》P327、P328、P329

http://www.dtcms.com/a/549697.html

相关文章:

  • 关于网站制作的论文个人网页效果图
  • 评估agent能力benchmark收集汇总
  • 番禺五屏网站建设西安网站建设xs029
  • 深入剖析 Rust `HashMap`:安全哈希 (SipHash) 与高性能冲突处理 (Swiss Table)
  • 一款漏洞库批量下载更新工具,便于在离线情况下漏洞的访问检索
  • 做任务的网站源码活动线报资源网
  • 【Oceanbase】OceanBase批量写入性能优化实战:转储、日志归档、多并发
  • 企业网站制作要求免费的企业网站
  • 9-SpringCloud-服务网关 Gateway-高级特性之 Filter-1
  • 服务器数据恢复—重装导致reiserfs中损坏数据如何复活?
  • RabbitMQ实现原理深度解析:从AMQP协议到高可用集群
  • ceph mgr 开启 telegraf 模块监控(influxdb+telegraf)
  • (107页PPT)园区大数据治理解决方案(附下载方式)
  • 59一起做网站备案通过 网站打不开
  • 上海团购网站建设北京网站优化企业
  • 基础算法精讲 08|前后指针|链表
  • 16.零基础入门——关于ArcCatalog基本内容介绍
  • 嵌入式 Linux 开发核心流程(含应用运行、联网、内核移植与编译,向内核添加新文件)
  • C#面试题及详细答案120道(41-50)-- 异常处理
  • Shell实用实例1000例3
  • 定制型网站一般价格水利厅网站集约化建设
  • 基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
  • 5-27 WPS JS宏数组元素添加删除应用2
  • 网站字体样式wordpress iis伪静态
  • YouBallin:重塑去中心化创作者平台的声誉体系
  • 云手机存在的意义是什么
  • 360免费wifi安全吗网站建设html代码优化
  • 长安大学门户网站是谁给做的石墨网站开发
  • xtuoj Digit String
  • 【代码随想录算法训练营——Day53】图论——110.字符串接龙、105.有向图的完全可达性、106.岛屿的周长