ARM 指令集跳转指令
一、跳转指令
跳转指令用于实现程序流程的跳转,在ARM 程序中有两种方法可以实现程序流程的跳转:
Ⅰ.使用专门的跳转指令。
Ⅱ.直接向程序计数器PC 写入跳转地址值。
通过向程序计数器PC 写入跳转地址值,可以实现在4GB 的地址空间中的任意跳转,在跳转之前结合使用 MOV LR,PC 等类似指令,可以保存将来的返回地址值,从而实现在4GB 连续的线性地址空间的子程序调用。
ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4 条指令:
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 指令。
转载于:https://www.cnblogs.com/armlinux/archive/2010/12/25/2396866.html
ARM 指令集跳转指令相关推荐
- ARM指令集复习 | 基本指令用法
文章目录 1.ARM指令集概述 2.ARM的寻址方式 2.1 立即寻址 2.2 寄存器寻址 2.3 多寄存器及块拷贝寻址 2.4 堆栈寻址 2.5 相对寻址 3.ARM指令集 3.1 存储器访问(L/ ...
- ARM中跳转指令BL/BLX偏移值计算规则
源文地址:http://www.cnblogs.com/Reyzal/p/4857948.html 1. 4字节对齐arm指令 规则:偏移=( 跳转地址-(指令地址+8) )/4 原因: 指令地址 + ...
- ARM 指令集的基础指令
ARM 和汇编语言基础 ARM 基础 位.字节.字是计算机数据存储的单位. 位是最小的存储单位,每一个位存储一个1位的二进制码,一个字节由8位组成. 而字通常为16.32或64个位组成.ARM 处理器 ...
- ARM指令集与Thumb指令集--区别关联--汇编指令 BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式
BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式 A 一.现在先区分下ARM指令集与Thumb指令集 Thumb 指令可以看作是 ARM 指 ...
- ARM汇编之跳转指令
ARM汇编语言之跳转指令 前言 ARM架构在当今主流的芯片中无论是MCU还是SOC都占有很大的市场,因此基于ARM架构的汇编语言对于嵌入式软件开发人员而言,其实也是一项必须掌握的基本功. " ...
- ARM汇编指令(ARM寻址方式、汇编指令、伪指令
1.寻址方式 所谓寻址方式就是:处理器根据指令中给出的地址信息来寻找物理地址的方法. 1)立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就是在指令中给出的. 只要取出指令也就是取 ...
- 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别
已针对原链接错误翻译并更正 跳转指令用于实现程序流程的跳转,在 ARM 程序中有两种方法可以实现程 ...
- 逆向知识内存ARM常用的汇编指令合集
ARM 处理器的指令集可以分为 跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令 六大指令,这里把其它几个指令一起发了出来,可以查看具体的目录 ...
- 基于ARM Cortex-M3微控制器(STM32系列)基础知识(三)——ARM指令集
指令概述 ARM指令 STR与LDR概述(详细在本文的数据加载与存储指令中) 数据操作指令 数据操作指令是指对存放在寄存器中的数据进行操作的指令.主要包括数据传送指令.算术指令.逻辑指令.比较与测试指 ...
最新文章
- Ansible源码解析 Inventory组概念
- openoj的一个小比赛(J题解题报告)poj1703(并查集)
- SSIS中代码页(Code Page)问题
- cron表达式 每隔1个小时_2-1!1-1!短短51个小时,西班牙人获4大喜讯,天佑武磊...
- AT4352-[ARC101C] Ribbons on Tree【dp,容斥】
- 【WordPress 建站教程】在 正文顶端或末尾插入固定的内容
- LaTeX中添加\usepackage{subfigure}一直报错的解决办法,亲测
- maven缺少依赖包,强制更新命令
- python远程主机强迫关闭了_Python 远程主机强迫关闭了一个现有的连接
- linux内核剪裁 4412,itop4412开发板-Linux内核的编译
- 智慧停车场管理系统、停车位、停车费、停车场系统、寻车、抬杆、入位车、出位车、车流量统计、停车、收费、缴费、预警管理、业务统计、报警统计、运维管理、报警系统、异常页面、数据配置、智慧停车原型、停车场
- 学会这 10 种定时任务,我有点飘了
- MySQL查看数据库、表的占用空间大小
- Android2.2 新特性
- JavaWeb中实现验证码(servlet版)
- Linux新建文件和目录的默认权限 - Umask
- 容器技术Docker K8s 10 入门实践集群创建
- excel中使用Nist REFPROP常用函数及使用方法
- Fences有一个桌面分区消失了怎么办
- 抖音上很火的3D立体动态相册实现代码!
热门文章
- mac obs 录屏黑屏_有了它,我把其他录屏软件都卸载了!
- 新建cordova应用,插件开发教程系列(总目录)
- git 实践(二) push的使用
- KVM 管理与使用说明
- PostgreSQL 9.6 IO Hang问题浅析与优化
- python 文件及文件夹操作
- 数字信号处理实验matlab版答案,数字信号处理习题答案及matlab实验详解.pdf
- python中安装使用模块_python 安装模块
- ios keychain 不被清理_iOS签名机制和说明文件【ios企业签名吧】
- erp无线架设服务器,erp数据库架设在云服务器上