arm push/pop/b/bl汇编指令

汇编作业二:堆栈操作(push,pop)以及arm数据处理指令 堆栈操作 在数据结构的学习中我们已经栈是先进后出的,汇编实现方面其实是通过将寄存器中的值存储(STR)到memory中来达到push的效果,而pop则是从memory中加载(LDR)值放到寄存器中。 堆栈根据栈顶指针指向的空间是否放值(空/满),以及扩张方向(递增/递减)可分为4种类型:空递增(EA),空递减(ED),满递增(FA),满递减(FD)。ARM用的是FD类型。 FD: 满递减 ... 阅读详情
AI摘要

本文详细介绍了ARM指令集中常用的push、pop、b、bl和bx指令。push用于将多个寄存器入栈,遵循低序列号寄存器先入栈的规则;pop则按相反顺序将栈中内容加载回寄存器;b指令实现简单的跳转;bl指令在跳转的同时保存返回地址到LR寄存器,适合调用子程序;bx指令则根据寄存器内容跳转并切换指令集。这些指令在程序控制流程中起到关键作用。

目录

1. push指令

2. pop指令

3. b指令

4. bl指令

5. bx指令



1. push指令

  • 功能描述:入栈

armv7 芯片手册:

Push Multiple Registers stores multiple registers to the stack, storing to consecutive memory locations ending just
below the address in SP, and updates SP to point to the start of the stored data.

  • 语法

 要点:

  • push支持同时将多个寄存器入栈,格式:{xx,xx},如:push {r0, r1,r2} 
  • 入栈顺序是先入栈序号低的寄存器到最低地址,比如push {fp, lr}效果图:

  •  push {r0, r1}和push{r1, r0}效果是一样的,因为按照arm规范是按照寄存器序列号顺序开始入栈,且从小序列号开始入栈。比如这种总是将r0入栈到低地址。

2. pop指令

  • 功能描述:出栈

Pop Multiple Registers loads multiple registers from the stack, loading from consecutive memory locations starting at the address in SP, and updates SP to point just above the loaded data.

  • 语法

要点:

  • 如同push一样,pop也支持同时pop出栈多个寄存器。
  • 出栈顺序和入栈顺序相反。pop {fp, lr},先从sp指向栈低地址处出栈内容到fp,再从高地址处出栈内容到lr中。

3. b指令

  • 功能描述:

Branch causes a branch to a target address.

  • 语法:只是简单的跳转到label处

B{<c>}{<q>} <label>

4. bl指令

  • 功能描述:

Branch with Link calls a subroutine at a PC-relative address.
Branch with Link and Exchange Instruction Sets (immediate) calls a subroutine at a PC-relative address, and changes instruction set from ARM to Thumb, or from Thumb to ARM.

  • 语法:

BL{X}{<c>}{<q>} <label>

The label of the instruction that is to be branched to.
For BL (encodings T1, A1), the assembler calculates the required value of the offset from the PC value of the BL instruction to this label, then selects an encoding that sets imm32 to that offset. Permitted offsets are even numbers in the range –16777216 to 16777214 (Thumb) or multiples of 4 in the range –33554432 to 33554428 (ARM).

BL指令于B指令区别:

        BL函数条跳转前执行:LR = PC - 4; (armv7为例)

Note: bl指令会计算label和当前pc位置的offset,所以这是相对跳转 

5. bx指令

  • 功能描述:跳转到寄存器中的地址

Branch and Exchange causes a branch to an address and instruction set specified by a register.

  • 语法

BX{<c>}{<q>} <Rm>

The register that contains the branch target address and instruction set selection bit. The PC can be used. This register can be the SP in both ARM and Thumb instructions, but ARM deprecates this use of the SP.

ARM 汇编指令:PUSH 和 POP 本文介绍了ARM汇编中的PUSH和POP指令,它们是用于栈操作的指令。PUSH用于将寄存器值压入栈(等价于STMDB),而POP用于从栈中恢复寄存器值(等价于LDMIA)。文章详细说明了这两种指令的语法、功能和使用场景,包括在子程序调用时保存和恢复现场的应用。此外,还指出了寄存器顺序、栈对齐要求等注意事项,并与x86架构的栈操作进行了简要对比。文章最后给出了一个完整的函数调用与返回示例,帮助理解这些指令的实际应用。 阅读详情

相关推荐

ARM汇编入门:手把手教你理解push、pop、b、bl指令的实战用法(附栈操作图解)

本文详细解析了ARM汇编中push、pop、b、bl等核心指令的实战用法,通过C代码到汇编的转换示例和栈操作图解,帮助开发者深入理解函数调用机制和寄存器使用规则。文章还提供了GDB调试技巧和常见优化方法,是嵌入式开发和逆向工程入门的实用指南。

weixin_30607029的博客 2187

跳转指令 —— B、BL

跳转指令 —— B、BL

challenglistic的博客 4186

ARM汇编指令集·带例题

ARM汇编指令集

m0_64560763的博客 2428

ARM 汇编指令:(六) B 跳转指令

能够影响指令条件码的是CRSP的那几位,有符号减法,也会影响到CRSP,所以这里跳转指令B的条件码是被subs的结果所影响。跳转指令 B 使程序跳转到指定的地址执行程序。指令 BL 将下一条指令的地址复制到 R14()寄存器中,然后跳转到指定地址运行程序。

孔祥锐 4878

RK3568移植linux qt和RT-rthread

先编译RT-Thread源码,并导出应用模块开发环境,再进行对应的应用APP代码编写和编译。首先在env中输入scons --target=ua ,生成当前bsp的用户程序开发环境, 进入/rt-thread-amp/bsp/rk3568_dlmodule目 录 , 先执行.\set_env.bat脚本进行环境配置。rk3568_dlmodule存放有00_so和01_mo,分别为动态库和应用模块,可以分别使用scons --lib=00_so和scons –app=01_mo命令来编译动态库和应用模块。

wangjie36的博客 2043

数据传送类指令(PUSH,POP,LEA)

堆栈中数据的存遵循“先进后出”的原则。堆栈的活动端被称为栈顶,固定端称为栈底。80x86的堆栈的伸展方向是从高地址向低地址。堆栈操作都是字或者双字操作,进栈时SP自动减2,出栈时SP自动加2进栈指令出栈指令还看昨天的那个题,交换数据也可以通过栈的指令完成练习1:已知SP=2110H,执行POP AX后,SP寄存器的值为()D:2112H2:找出指令的错误第一条指令类型不匹配,第二条指令不能同时为存储器操作数,

学习笔记 4126

深入RTOS(2):极简ARM架构与汇编

该指令存在flash中,LDR是load register的意思,CPU从[addrA]把它存的内容加载到R0寄存器。

m0_63667112的博客 507

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

Cortex-A7 常用汇编指令

Cortex-A7 常用汇编指令 一、处理器内部数据传输指令 1.mov 将数据从一个寄存器拷贝到另外一个寄存器,或者将一个立即数传递到寄存器里面 MOV R0,R1 @将寄存器 R1 中的数据传递给 R0,即 R0=R1 MOV R0, #0X12 @将立即数 0X12 传递给 R0 寄存器,即 R0=0X12 2.MRS 将特殊寄存器(如 CPSR 和 SPSR)中的数据传递给通用寄存器,要读取特殊寄存器的数据只能使用 MRS 指令 MRS R0, CPSR @将特殊寄存器 ...

小胡同学的工程师学习之路 750

图文并茂把Ubuntu22.04安装到u盘,实现即插即用

1、刚好打算把Ubuntu安装到u盘,随便记录下整个过程。 2、前提准备:u盘(我的是16g大小),Vmware虚拟机,Ubuntu镜像文件(可以去官网下载); 3、下面记录全过程: 1、打开虚拟机,并选择创建新的虚拟机: 2、选典型: ​ ...

子非鱼 1万+

【STM32】STM32F407实现简单的Modbus协议

1.ModBus协议简介 MODBUS协议是一种串行通信协议,由Modicon公司(施耐德公司前身)发表,由于其公开发表且无版权要求,易于部署和维护,在工业界广泛应用。MODBUS采用主从通信(Master/Slave),MODBUS有三种报文格式:ASCII、RTU、TCP,本文主要讨论RTU。 如下图所示,串行通信上的MODBUS协议主要由地址,功能码,数据,CRC校验四部分数据帧构成。主机和从机的串行通信设备要求一致,参数要求一致,即假设使用串口,主从机波特率,奇偶校验...

BadBoyHolly的博客 8183

# [特殊字符]️ 嵌入式调试从入门到进阶 —— ARM 架构(二)

本文深入浅出地讲解了ARM架构下C代码的执行原理与调试技巧。文章从"a=1"这条简单语句出发,剖析了单片机硬件系统中Flash与RAM的分工、CPU执行指令的完整流程(取指-译码-执行)、内存映射机制以及关键汇编指令(LDR/STR等)。通过反汇编实例展示了C代码到机器码的转换过程,强调理解这些底层机制对调试的重要性。文中配有清晰的执行流程图和内存访问示意图,帮助读者建立从代码到硬件的完整认知框架,为后续深入学习ARM汇编和调试技术打下基础。

2502_92009732的博客 405

STM32F407编译下载全流程:从CubeMX到HEX烧录

嵌入式固件开发中,编译与下载是连接代码与硬件的关键闭环。其本质是将高级语言描述的逻辑,经交叉编译(ARM GCC)、链接(ELF生成)、格式转换(HEX/BIN)后,通过调试接口(SWD/UART)写入MCU Flash存储器的过程。该流程涉及工具链协同、二进制格式特性(如Intel HEX的地址映射与无元数据设计)、启动模式(System Memory Bootloader)、Flash选项字节(RDP/WRP)等底层机制,直接决定固件可运行性与安全性。典型应用场景包括STM32F407开发板调试、量产固

weixin_28840811的博客 259

ARM系统启动之汇编

我们在进行嵌入式 Linux开发的时候是绝 对要掌握基本的 ARM汇编,因为Cortex-A芯片一上电SP指针还没初始化,C环境还没准备 好,所以肯定不能运行 C代码,必须先用汇编语言设置好C环境,比如初始化DDR、设置SP 指针等等,当汇编把 C环境设置好了以后才可以运行C代码。

weixin_49038319的博客 146

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 320

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4925

硬件(六)arm指令

通过 MRS(Move to Register from Special register)读取特殊寄存器的值到通用寄存器,再通过 MSR(Move to Special register from Register)将修改后的值写回特殊寄存器,从而实现模式切换。用于比较两个寄存器的值或一个寄存器与立即数的值,原理是对两个数求差,看结果是否为 0,会无条件修改。2、把某个数展开成2进制,这个数的最高位1至最低位1之间的二进制数序列的位数不能超过8位;

2302_80202237的博客 954

Yocto开发讲解系列 - 总目录

Yocto开发讲解系列总纲Yocto开发专栏前言

fulinux的博客 3万+

STM32_内存基础知识

STM32 的存储系统采用寄存器、缓存(Cache)RAM、Flash通过接口扩展的 SDRAM、QSPI Flash 等。

2502_90478897的博客 937

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3896

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

嵌入式Linux自学笔记1-点灯(正点原子)--裸机篇

①开时钟→CCGR0-CCGR6②配复用→0101③配置电气属性→④设置方向与输出→x。

qq_64413333的博客 230

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

dump:图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了。 微小的幸福就在身边,容易满足就是天堂。 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章《Android ARM常用的汇编指令合集》 再来继续我们的学习,我们先来看张图。这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要

奥特曼超人的博客专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ARM指令集【 PUSH \POP】【跳转B\BL\BX\BLX \BXJ】【数据操作LDR\LDRB\LDRH\LDM\STR\STRB\STRH\STM】【移位LSL/LSR/ASL/ASR】

PUSH and POP 本博客摘录于:http://blog.sina.com.cn/s/blog_95baef7b01014ub4.html 示例 : PUSH {R4,LR} 将低寄存器R4入栈,LR也入栈。 POP {R4,PC} 将堆栈中的数据弹出到低寄存器 R4 及 PC 中 说明 : ...

挖到尽头 7806

常用的ARM汇编指令

常用的ARM汇编指令

m0_69251699的博客 2126

arm b bl 地址无关码_ARM的机器码和汇编指令

ARM处理器和Intel处理器之间有很多的差异,其中最大的不同点就是它们的指令集。Intel是一个CISC(Complex Instruction Set Computing,复杂指令集)处理器。因此它具有更庞大,功能更丰富的指令集,并且允许指令进行一些复杂的访存操作。它也因此具有支持更多的复杂操作和寻址方式,并且寄存器的数量比ARM要少的多。CISC处理器一般用在通用PC,工作站和服务...

weixin_39790168的博客 683
上一篇: arm ldr/ld/数据加载系列指令和adr指令
下一篇: 汇编视角分析C++虚函数实现原理
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值