B Label, BL Label 指令

B Label, BL Label

跳转到标号Label 处,B跳转指令的跳转范围大小为[0,32MB], 可以往前跳,也可以往后条,无条件跳转指令B主要用在循环,分之结构的汇编程序中,使用示例如下。

CMP R2, #0

REQ label 若R2 = 0,则跳转到label处。

label:

....

2 BL label

BL跳转指令表示带链接的跳转,在跳转之前,BL指令会先将当前指令的下一条指令地址(即返回地址)保存到LR寄存器中,然后跳转到label处执行,BL指令一半用在函数调用的场合,主函数在跳转到自函数执行之前,会先将返回地址,即当前跳转指令的吓一条指令地址保存到LR寄存器中,自函数执行结束后,LR寄存器中的地址将被赋值给PC,处理器就可以返回到原来的主函数中继续运行了。

3 BX Rm

BX 表示带状态切换的跳转,Rm寄存器中保存的是跳转地址,要跳转的目标地址处可能是ARM指令,也可能是Thumb指令,处理器根据Rm[0]位决定是切换到ARM状态还是切换到Thumb状态。

0 表示目标地址处是ARM指令,在跳转之前要先切换到Thumb状态。

1 表示目标地址处是Thumb指令,在跳转之前要先切换的跳转,使用方法和上面相同。不再赘述。

3.3 ARM寻址方式

    ARM属于RISC体系结构,一个ARM汇编程序中的大部分汇编指令,基本上都和数据传输有关,在内存一寄存器,内存一内存,寄存器一寄存器之间来回传输数据。不通的ARM指令又有不同的寻址方式,比较常见的寻址方式有寄存器寻址,立即寻址,寄存器偏移寻址,寄存器间接寻址,基止寻址,多寄存器寻址,相对寻址等。

3.3.1 寄存器寻址

    寄存器寻址比较简单,操作数保存在寄存器中,通过寄存器名就可以直接对寄存器中的数据进行读写。

MOV R1, R2 将寄存器R2中的值传递到R1

ADD R1, R2, R3; R1 = R2 + R3

3.3.2 立即数殉职

   在立即数旬之中,ARM指令中的操作数为一个常数,立即书以#

为前缀,0x前缀表示该立即数为十六进制,不加前缀默认是十进制。

ADD R1, R1, #1 将R1寄存器中的值加1,并将结果保存到R1中。

MOV R1, #0xff 将十六进制常熟0xff 写到R1寄存器中

MOV R1, #12 将十进制常熟12放到R1寄存器中

ADD R1,R1,#16 R1 = R1 + 16

3.3.3 寄存器偏移寻址

   寄存器偏移寻址可以看作寄存器寻址的一种特特例,通过第二个操作数operand2 的灵活配置,我们可以将第二个操作数做各种左移和右移操作,作为新的操作数使用。

MOV R2,R1,L5L, #3

ADD R3, R2, R1, L5L, #3

ADD R3, R2, R1, L5L, R0

常见的移位操作有逻辑移位和算数移位,两者的区别是,逻辑移位无论是左移还是右移,空缺的一律补0,而算数移位则不同,左移补0,右移补符号位。

3.3.4 寄存器间接寻址

    寄存器间接寻址主要用来在内存和寄存器之间传递数据,寄存器中保存的是数据在内存中的存储地址,我们通过这个地址就可以在寄存器和内存之间传输数据,C预研中的指针操作,在汇编层次其实就是使用寄存器间接寻址实现的,寄存器间接寻址的使用示例以及说明如下所示。

LDR R1,[R2] 将R2中的值作为地址,取该内存地址上的数据,保存到R1

STR R1, [R2] 将R2中的值作为地址,将R1寄存器的值写入该内存地址。

3.3.5 基址寻址

   基址殉职其实也属于寄存器间接寻址。两者的不同之处在于,基址寻址将寄存器中国呢的地址与一个偏移量相加,生成一个新地址,然后基于这个新地址去访问内存。

   LDR R1, [FP,#2] 将FP中的值加2作为新的地址,取改地址上的值保存到R1

   LDR R1, [FP, #2] 

LDR R1,[Fp, R0] 取FP + R0位置的值存入R1

   STR R1, [FP, #-2] 将R1存入FP - 2地址位置。

  基址寻址一般用在查表,数据访问,函数的栈帧管理等场合,根据偏移的正负,基址寻址又可以分为向前索引寻址和向后索引殉职,如上面的第一条和第三条指令,就是向后缩阴寻址,而第6条指令则为向前索引寻址。

3.3.6 多寄存器寻址

  STM/LDM 指令就属于多寄存器寻址,一次可以传输多个寄存器的值

LDMIA SP!, {R0-R2, R14} 将内存栈中的数据依次弹出到R14, R2,R1,R0

STMDB SP!, {R0-R2,R14} 将R0,R1,R2,R14依次压入栈

STMFD SP!,

  在多寄存器寻址中,用大括号括起来的就是寄存器列表,寄存器之间用逗号隔开,如果是连续的寄存器,还可以使用连续符号连接,如R0R3,就表示R0,R1,R2这4个寄存器,。

LDM/STM指令一半和IA,IB,DA,DB组合使用,分别表示Increase After, Increase Before, Decrease After Decrease Before 

ARM没有专门的入栈和出栈指令,ARM中的栈操作其实就是通过上面所讲的STM/LDM指令和栈指针SP配合操作完成的,栈一半可以分为以下四类

递增栈A 入栈时,SP栈指针从弟弟址往高地址方向增长。

递减栈D 入栈时,SP栈指针从高地址往低地址方向增长

满栈F,SP栈指针总是指向栈顶元素。

空栈E,SP栈指针总是指向栈顶元素。

空栈E,SP栈指针总是指向栈顶元素的下一个空闲的存储单元。

ARM默认使用满递减堆栈,通过STMFD/LDMFD指令配对使用,完成堆栈的入栈和出栈操作,ARM中的PUSH和POP指令其实就是LDM/STM的同义词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc140u.dll丢失的解决方法,以及mfc140u.dll解决方法的优缺点

在使用电脑过程中,有时会遇到一些与动态链接库文件(DLL)相关的错误。其中,mfc140u.dll丢失的错误是较为常见的一种。当这个关键的mfc140u.dll文件丢失或损坏时,可能会导致某些应用程序无法正常运行。在本文中&#xff…

linux清理僵尸进程

当你top看到这个,或者按M后看到内存吃的很多,那你看下有没有🧟 二选一查看是什么进程 ps aux | egrep "Z|defunct" ps -aux | awk {if($8"Z"){print $2,$11}}没用直接杀杀杀 kill -9 查到的PID号可中断下载文件 wget…

AlmaLinux download

前言 一个开源的、社区拥有和管理的、永远免费的企业级Linux发行版,专注于长期稳定性,提供一个健壮的生产级平台。AlmaLinux操作系统是1:1二进制兼容RHEL和pre-Stream CentOS。 AlmaLinux download VersionAlmaLinux downloadAlmaLinux backup阿里云…

webshell免杀之传参方式

1.Cookie 由于Cookie基本上是每个web应用都需要使用到的,php应用在默认情况下,在Cookies请求头中会存在一个PHPSESSIDxxxx这样的cookie,其实这个就可以成为我们的传参位置 使用burp抓包将内容改成base64加密后的命令 可以看到已经执行成功了…

BeautifulReport测试报告框架

BeautifulReport测试报告框架 ##执行文件excute_case.py import unittest import os, datetime from BeautifulReport import BeautifulReportroot_dir os.path.dirname(os.path.abspath(__file__)).replace(\\, /) print(root_dir路径,root_dir) #test_dir root_dir /test…

c语言从入门到实战——回调函数与qsort的讲解和模拟实现

回调函数与qsort的讲解和模拟实现 前言1. 回调函数是什么?2. qsort2.1 使用qsort函数排序整型数据2.2 使用qsort排序结构数据 3. qsort函数的模拟实现 前言 回调函数是一个函数,它作为参数传递给另一个函数,并且能够在该函数内部被调用。在C…

Nginx 可视化管理平台:nginx-proxy-manager

本心、输入输出、结果 文章目录 Nginx 可视化管理平台:nginx-proxy-manager前言nginx-proxy-managernginx-proxy-manager 特性快速开始使用 Docker 网络开启 Docker 健康检查相关可视化页面相关链接弘扬爱国精神Nginx 可视化管理平台:nginx-proxy-manager 编辑:简简单单 Onl…

Vue 路由器传参和取值 路径参数

Query参数取值 http://www.csdn/index?id10&age123 取值 this.$route.query.id//获取id值 this.$route.query.age//获取age值传值 <router-link :to"{path:/index,query:{ id:10,age:123 }}"></router-link>携带参数跳转到指定路由 this.$ro…

深入解析SSD Wear Leveling磨损均衡技术:如何让你的硬盘更长寿?

SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。NAND闪存原理上是一…

【DevOps】Git 图文详解(五):远程仓库

Git 图文详解&#xff08;五&#xff09;&#xff1a;远程仓库 1.远程用户登录1.1 &#x1f511; 远程用户登录&#xff1a;HTTS1.2 &#x1f511; 远程用户登录&#xff1a;SSH 2.远程仓库指令 &#x1f525;3.推送 push / 拉取 pull4.fetch 与 pull 有什么不同 &#xff1f; …

【汇编】“转移”综述、操作符offset、jmp指令

文章目录 前言一、转移综述1.1 :背景&#xff1a;1.2 转移指令1.3 转移指令的分类按转移行为根据指令对IP修改的范围不同 二、操作符offset2.1 offset操作符是干什么的&#xff1f;标号是什么&#xff1f; 2.2 nop是什么&#xff1f; 三、jmp指令3.1 jmp指令的功能3.2 jmp指令&…

【目标测距】雷达投影测距

文章目录 前言一、读取点云二、点云投影图片三、读取检测信息四、点云投影测距五、学习交流 前言 雷达点云投影相机。图片目标检测&#xff0c;通过检测框约束等等对目标赋予距离。计算消耗较大&#xff0c;适合离线验证操作。在线操作可以只投影雷达检测框。 一、读取点云 py…

关于node安装和nvm安装的问题

node 1.已经自定义路径安装了node&#xff0c;但是在cmd输入node -v显示不是内部命令 路径问题&#xff1a;确保 Node.js 已经被添加到了系统的环境变量 PATH 中。PATH 环境变量包含了操作系统用来查找命令的位置。你可以通过以下步骤检查 Node.js 是否已被添加到 PATH&#x…

校园报修抢修小程序系统开发 物业小区报修预约上门维修工单系统

开发的功能模块有&#xff1a; 1.报修工单提交&#xff1a;学生、教职员工等可以使用小程序提交报修请求。这通常包括选择报修的问题类型&#xff08;如水漏、电器故障、照明问题等&#xff09;&#xff0c;地点&#xff0c;报修联系人&#xff0c;联系电话等&#xff0c;并提供…

【5k字长文 | Vue学习笔记】#1 认识Vue对象和基础语法

Vue是一个非常流行的渐进式JavaScript框架&#xff0c;渐进式指的是自底向上&#xff0c;从小组件逐渐向上构成整个项目&#xff0c;渐进式还可以理解为&#xff1a;用什么就拿什么&#xff0c;每个组件只做自己的事&#xff0c;尽可能解耦合。 本节我们将学习简单的Vue实例&a…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。在这个背景下&#xff0c;Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

upload-labs关卡11(双写后缀名绕过)通关思路

文章目录 前言一、回顾前几关知识点二、靶场第十一关通关思路1、看源代码2、bp抓包双写后缀名绕过3、检查文件是否成功上传 总结 前言 此文章只用于学习和反思巩固文件上传漏洞知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚未授权的…

细思极恐!5秒钟克隆你的声音

Mocking Bird 是开发者 babysor 开源的比较火的 AI 拟声开源项目&#xff0c;目前在 GitHub 已经获得了 32K 的 Star&#xff0c;它能在 5 秒内克隆你的声音并生成任意语音内容&#xff0c;支持中文普通话。 01 功能特性 支持中文普通话拟声&#xff0c;并且在多个中文数据集…

小程序授权获取头像

wxml <view class"header"><text>头像</text><button class"butt" plain"true" open-type"chooseAvatar" bind:chooseavatar"chooseAvatar"><image src"{{HeadUrl}}" mode"&quo…

初刷leetcode题目(5)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…