文章目录

  • 跳转指令
    • B指令和BL指令
  • 长跳转指令

ARM中有两种程序跳转方式:

  1. 跳转指令;
  2. 向PC写入目标地址值;

跳转指令

通过跳转指令,可以实现从当前指令向前或者向后32MB的地址空间跳转(一般来讲也足够了,基本上没有需要使用汇编语言写超过32MB程序的场景),总共有4种跳转指令:

  1. B:跳转指令;
  2. BL:带返回的跳转指令;
  3. BLX:带返回和状态切换的跳转指令;
  4. BX:带状态切换的跳转指令;

带X的指令中的状态切换指的ARM状态和Thumb状态的切换,我们不关注,所以这些指令暂不介绍。

B指令和BL指令

B{L}{cond} <target_address>// 其中signed_immed_24是编译器根据指令中的target_address计算出来的
if ConditionPassed(cond) thenif L == 1 thenLR = address of the instruction after the branch instructionPC = PC + (SignExtend(signed_immed_24) << 2)

这两个指令可以带条件执行。B指令仅仅是跳转到目标地址,BL指令会在跳转前先将PC值保存在LR中,所以BL常常用作子程序调用。

在实际编程中,<target_address>通常用标签代替,毕竟程序员不可能在编码的时候知道目标地址的具体值。<target_address>在指令编码中占24位,汇编器会将该值左移2位(所以跳转范围才是正负32MB),然后和PC值相加后作为跳转的目标地址,具体的计算方法可以参考书籍的介绍。

注:正是因为这类指令是将跳转的目标地址编码到指令中的,所以它们的跳转范围才是有限的。

长跳转指令

向PC赋值可以实现在0~4GB地址空间内的任意跳转,所以也叫做长跳转,并且如果在跳转之前,使用“MOV LR, PC”等指令将返回地址保存在LR中,也可以实现类似BL指令的功能。

注:通常使用ADR、LDR等伪指令来实现长跳转。

ARM指令集之跳转指令相关推荐

  1. ARM汇编之跳转指令

    ARM汇编语言之跳转指令 前言 ARM架构在当今主流的芯片中无论是MCU还是SOC都占有很大的市场,因此基于ARM架构的汇编语言对于嵌入式软件开发人员而言,其实也是一项必须掌握的基本功. " ...

  2. ARM体系架构—ARMv7-A指令集:内存操作指令

    ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 一.ARMv7-A内存操作指令 二.单寄存器寻址内存操作指令 三.多寄存器寻址内存操作指令 四.SWP,SWPB 一.ARMv7-A指令 ...

  3. ARM指令集与Thumb指令集--区别关联--汇编指令 BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式

    BX        LR    ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式 A 一.现在先区分下ARM指令集与Thumb指令集        Thumb 指令可以看作是 ARM 指 ...

  4. ARM 指令集跳转指令

    一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...

  5. 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

  6. x86指令集和arm指令集部分对比

    本文主题:本文主要对比了x86 ISA 和 arm ISA的部分区别. 目录 一.x86 ISA 1.指令组成 二.指令各部分解析 1.Instruction Prefixes(可选部分) 2.Opc ...

  7. ARM指令集复习 | 基本指令用法

    文章目录 1.ARM指令集概述 2.ARM的寻址方式 2.1 立即寻址 2.2 寄存器寻址 2.3 多寄存器及块拷贝寻址 2.4 堆栈寻址 2.5 相对寻址 3.ARM指令集 3.1 存储器访问(L/ ...

  8. arm 跳转指令跳转范围

    B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M 使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值) 关于B指令和B ...

  9. ARM指令——跳转指令

    目录 一.跳转指令 方式一:直接修改PC寄存器的值(不建议使用,需要自己计算目标指令的绝对地址) 方式二:不带返回的跳转指令,本质就是将PC寄存器的值修改成跳转标号下指令的地址 方式三:带返回的跳转指 ...

  10. ARM中跳转指令BL/BLX偏移值计算规则

    源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...

最新文章

  1. 5G NR — 基站的扇区、小区、跟踪区、注册区、服务区
  2. windows 2008 R2下安装Exchange 2010(单域环境下)
  3. k8s minikube启动时指定镜像源的启动方式
  4. 去掉 Android工程中让人很不爽的“黄色警告”
  5. 【全0、全1的地址干嘛用的】几类特殊的IP地址,网络号全0,主机号全1等
  6. chrome 70 android,Android版Chrome Beta 70 (70.0.3538.17) 已发布
  7. jquery --- 阻止表单默认的提交行为,标准化表单的数据
  8. TP5路由知识简单个人汇总
  9. 数据恢复工具(minitool power data recovery 8) v8.8(含64位32位)
  10. 架构真经 | 缓存为王
  11. 微信小程序个人/企业开放服务类目一览表
  12. 如何理解相关性系数(pearson、spearman、kendall)
  13. c语言编写坦克大战设计报告,c语言编写坦克大战源代码
  14. uniapp中调用QQ一键登录实现方法
  15. HTML+CSS实现一个淡显淡隐轮播图
  16. 触龙——可解释推荐系统
  17. (Fabric学习坑)com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;
  18. Redis分布式算法原理(重点)
  19. 【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统
  20. Java抽取Office、PDF的四件兵器

热门文章

  1. 怎么解决计算机键盘驱动,解决键盘失灵、安装更新键盘驱动方法
  2. 用麦咖啡(mcafee)打造自己的安全服务器
  3. C语言---双人贪吃蛇
  4. 任务栏图标变成白色怎么办
  5. Taobao网的目录分类结构
  6. BIGEMAP下载离线地图数据(支持谷歌、百度、高德等所有地图源)
  7. Systemd基础篇:systemd vs SysVinit
  8. 爆肝一周,用Python在物联网设备上写了个智能语音助手-阿里云智能对话机器人
  9. 关于java就业的简历模板,工作一年java简历模板
  10. ABAQUS常用量纲