ARM指令集之跳转指令
文章目录
- 跳转指令
- B指令和BL指令
- 长跳转指令
ARM中有两种程序跳转方式:
- 跳转指令;
- 向PC写入目标地址值;
跳转指令
通过跳转指令,可以实现从当前指令向前或者向后32MB的地址空间跳转(一般来讲也足够了,基本上没有需要使用汇编语言写超过32MB程序的场景),总共有4种跳转指令:
- B:跳转指令;
- BL:带返回的跳转指令;
- BLX:带返回和状态切换的跳转指令;
- 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指令集之跳转指令相关推荐
- ARM汇编之跳转指令
ARM汇编语言之跳转指令 前言 ARM架构在当今主流的芯片中无论是MCU还是SOC都占有很大的市场,因此基于ARM架构的汇编语言对于嵌入式软件开发人员而言,其实也是一项必须掌握的基本功. " ...
- ARM体系架构—ARMv7-A指令集:内存操作指令
ARM体系架构-ARMv7-A指令集 一.ARMv7-A指令集 一.ARMv7-A内存操作指令 二.单寄存器寻址内存操作指令 三.多寄存器寻址内存操作指令 四.SWP,SWPB 一.ARMv7-A指令 ...
- ARM指令集与Thumb指令集--区别关联--汇编指令 BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式
BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式 A 一.现在先区分下ARM指令集与Thumb指令集 Thumb 指令可以看作是 ARM 指 ...
- ARM 指令集跳转指令
一.跳转指令 跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转: Ⅰ.使用专门的跳转指令. Ⅱ.直接向程序计数器PC 写入跳转地址值. 通过向程序计数器PC 写入跳转地 ...
- 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...
- x86指令集和arm指令集部分对比
本文主题:本文主要对比了x86 ISA 和 arm ISA的部分区别. 目录 一.x86 ISA 1.指令组成 二.指令各部分解析 1.Instruction Prefixes(可选部分) 2.Opc ...
- ARM指令集复习 | 基本指令用法
文章目录 1.ARM指令集概述 2.ARM的寻址方式 2.1 立即寻址 2.2 寄存器寻址 2.3 多寄存器及块拷贝寻址 2.4 堆栈寻址 2.5 相对寻址 3.ARM指令集 3.1 存储器访问(L/ ...
- arm 跳转指令跳转范围
B 和 BL 指令都是 相对跳转(短跳转) 指令,通过偏移量跳转, 最大跳转距离是 ±32M 使用 mov pc, <>可以实现 对跳转(长跳转)(不会保存当前 PC 值) 关于B指令和B ...
- ARM指令——跳转指令
目录 一.跳转指令 方式一:直接修改PC寄存器的值(不建议使用,需要自己计算目标指令的绝对地址) 方式二:不带返回的跳转指令,本质就是将PC寄存器的值修改成跳转标号下指令的地址 方式三:带返回的跳转指 ...
- ARM中跳转指令BL/BLX偏移值计算规则
源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...
最新文章
- 5G NR — 基站的扇区、小区、跟踪区、注册区、服务区
- windows 2008 R2下安装Exchange 2010(单域环境下)
- k8s minikube启动时指定镜像源的启动方式
- 去掉 Android工程中让人很不爽的“黄色警告”
- 【全0、全1的地址干嘛用的】几类特殊的IP地址,网络号全0,主机号全1等
- chrome 70 android,Android版Chrome Beta 70 (70.0.3538.17) 已发布
- jquery --- 阻止表单默认的提交行为,标准化表单的数据
- TP5路由知识简单个人汇总
- 数据恢复工具(minitool power data recovery 8) v8.8(含64位32位)
- 架构真经 | 缓存为王
- 微信小程序个人/企业开放服务类目一览表
- 如何理解相关性系数(pearson、spearman、kendall)
- c语言编写坦克大战设计报告,c语言编写坦克大战源代码
- uniapp中调用QQ一键登录实现方法
- HTML+CSS实现一个淡显淡隐轮播图
- 触龙——可解释推荐系统
- (Fabric学习坑)com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;
- Redis分布式算法原理(重点)
- 【愚公系列】2022年12月 .NET CORE工具案例-多语言离线翻译系统
- Java抽取Office、PDF的四件兵器