跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程序流程的跳转:

(1) 使用专门的跳转指令。

(2) 直接向程序计数器 PC 写入跳转地址值。

通过向程序计数器 PC 写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳转之前结合使用

MOV LR , PC

等类似指令,可以保存将来的返回地址值,从而实现在 4GB 连续的线性地址空间的子程序调用。

===============================================

ARM 指令集中的跳转指令可以完成从当前指令向前或向后的 32MB 的地址空间的跳转,包括以下 4 条指令:

(1) B 跳转指令

(2) BL 带返回的跳转指令

(3) BLX 带返回和状态切换的跳转指令

(4) BX 带状态切换的跳转指令

1、 B 指令

B 指令的格式为:

B{条件} 目标地址

B 指令是最简单的跳转指令。一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的目标地址,从那里继
续执行。注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是 24 位有符号数,左移两位后有符号扩展为 32 位,表示的有效偏移为 26 位(前后32MB 的地址空间)。以下指令:

B Label ;程序无条件跳转到标号 Label 处执行

CMP R1 ,# 0 ;当 CPSR 寄存器中的 Z 条件码置位时,程序跳转到标号 Label 处执行

BEQ Label

2、 BL 指令

BL 指令的格式为:

BL{条件} 目标地址

BL 是另一个跳转指令,但跳转之前,会在寄存器R14 中保存PC 的当前内容,因此,可以通过将R14 的内容重新加载到PC 中,来返回到跳转指令之后的那个指令处执行。该指令是实现子程序调用的一个基本但常用的手段。以下指令:

BL Label ;当程序无条件跳转到标号 Label 处执行时,同时将当前的 PC 值保存到 R14 中

3、 BLX 指令

BLX 指令的格式为:

BLX 目标地址

BLX 指令从ARM 指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM 状态切换到Thumb 状态,该指令同时将PC 的当前内容保存到寄存器R14 中。因此,当子程序使用Thumb 指令集,而调用者使用ARM 指令集时,可以通过BLX 指令实现子程序的调用和处理器工作状态的切换。

同时,子程序的返回可以通过将寄存器R14 值复制到PC 中来完成。

4、 BX 指令
BX 指令的格式为:

BX{条件} 目标地址

BX 指令跳转到指令中所指定的目标地址, 目标地址处的指令既可以是ARM 指令,也可以是Thumb指令。

ARM汇编指令(B/BL/BX)相关推荐

  1. arm汇编指令详细整理及实例详解

    目录 一.简介 二.ARM 汇编指令说明 2.1 32位数据操作指令 2.2 32位存储器数据传送指令 2.3 32位转移指令 2.4 其它32位指令 三.实例讲解 3.1 MRS 3.2 MSR 3 ...

  2. arm汇编指令——分析问题的利器

    文章目录 arm汇编指令为什么重要 1. 主导问题 2. arm汇编指令分类介绍 通用寄存器 状态寄存器 数据转移指令 寻址格式 运算指令 比较指令 跳转指令 3. 反汇编接口 4. 反汇编分析举例 ...

  3. 操作符指令 - ARM汇编指令(二)

    ARM包含6种重要的数据计算处理指令 数据处理指令格式与条件码 条件码 ARM汇编特点3:指令后缀 同一指令经常附带不同后缀,变成不同的指令.经常使用的后缀有: B(byte)功能不变,操作长度变为8 ...

  4. 常用的ARM汇编指令总结

    第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...

  5. ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结

    1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...

  6. 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总

    嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...

  7. ARM汇编指令调试方法

    学习ARM汇编时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在 ...

  8. 1.15.ARM汇编指令3之逻辑指令

    ARM汇编指令之逻辑指令:and & orr & eor & bic * and 逻辑与操作指令,将operand2的值与寄存器Rn的值按位逻辑与操作,结果保存到Rd中. 指令 ...

  9. ARM汇编指令学习---基于启动文件startup.S分析

    本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...

最新文章

  1. 循序渐进Python3(二) -- 数据类型
  2. GDB调试:观察点(数据断点)【GDB调试】
  3. OpenCASCADE:写IGES
  4. android 限制edittext 最大输入字符数
  5. 易中天讲的很有哲理的十句话【转】
  6. 安全系列之一:如何利用IPSec保证远程桌面的安全性!(上)
  7. EazyDraw for Mac(矢量图绘制软件)
  8. Apache Traffic Server服务搭建
  9. SCOR模型(转载)
  10. 针对初学者的 MQL 5 中的自定义指标
  11. 我的大数据之路 -- 猫眼电影再战
  12. Oracle 锁表查询大全
  13. 【手写源码-设计模式9】-装饰器模式-基于王者荣耀英雄-甄姬皮肤场景
  14. 巴比特独家 | 区块链入选新基建,这几件事你不得不知
  15. 地下管孔资源紧张,气吹微缆不香吗?
  16. 视频教程-PHP零基础七天入门视频课程(免费50章)-PHP
  17. Git学习之旅--撤销与删除
  18. 怎么让Eclipse对html和js代码自动提示
  19. 奔向三张,不破不立:一个iOS开发工程师的职业规划思考(转自iOSer 逆,以资激励)
  20. 全员股权激励不等于全员持股

热门文章

  1. 例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金
  2. SQL优化之常用优化工具
  3. 手机沙盒隔离软件_x8沙箱官网下载-X8沙箱(隔离运行双开助手)下载v0.6.8.8-cn 安卓版-西西软件下载...
  4. 计算机等级二级公共基础
  5. clover写入efi_clover如何使用UEFI引导和EFI驱动选择
  6. 如何理解面向对象的封装、继承、多态
  7. 并发编程-初级之认识并发编程
  8. 什么lol云顶之奕小助手小蜜蜂肝不完了?让万能的python来帮你
  9. 线性回归的理解与公式推导
  10. 背景减除算法之K-Nearest(KNN)和Mixture of Gaussians(MOG2)