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

这篇具有很好参考价值的文章主要介绍了arm push/pop/b/bl汇编指令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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.

  • 语法

arm push,linux内核初探,汇编语言,arm,嵌入式硬件

 要点:

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

arm push,linux内核初探,汇编语言,arm,嵌入式硬件

  •  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.

  • 语法

arm push,linux内核初探,汇编语言,arm,嵌入式硬件

要点:

  • 如同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.文章来源地址https://www.toymoban.com/news/detail-744210.html

到了这里,关于arm push/pop/b/bl汇编指令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ARM汇编语言(2)

    ARM汇编语言是一种低级别的计算机指令集架构(ISA)语言,它是ARM处理器上的一种指令集架构,用于编写底层的系统软件,例如操作系统、驱动程序和嵌入式系统应用程序。 ARM汇编语言使用基于寄存器的指令集,其中指令操作的数据通常存储在处理器的寄存器中,而不是内存

    2024年02月02日
    浏览(12)
  • ARM Linux 内核启动1 —— 汇编阶段

    ARM Linux 内核启动1 —— 汇编阶段

    1、Makefile 分析 (1) kernel 的 Makefile 写法和规则等,和 uboot 的 Makefile 是一样的,甚至 Makefile 中的很多内容都是一样的。 (2) kernel 的 Makefile 比 uboot 的 Makefile 要复杂,这里我们并不会一行一行的详细分析。 (3) Makefile 中只有一些值得关注的会强调一下,其他不强调的地方暂时可以

    2024年02月12日
    浏览(42)
  • 51单片机汇编语言指令大全

    参考链接 https://blog.csdn.net/weixin_45702442/article/details/115874162 https://blog.csdn.net/acslsr/article/details/106881712 在这里稍作终结,方便复习 51系列单片机按照功能分科分为5大类 数据传送类指令28条; 算数操作类指令24条; 逻辑运算类指令25条; 控制转移类17条; 位操作类17条。 MOV A,R

    2024年02月07日
    浏览(14)
  • ARM 体系结构与汇编语言

    Load/Store 架构,CPU 不能直接处理内存中的数据,需要先将内存中的数据加载到寄存器中才能操作,然后将处理结果存储到内存中。 固定的指令长度、单周期指令。 倾向于使用更多的寄存器来存储数据,而不是使用内存中的堆栈、效率更高。 ARM 有桶型移位寄存器,单周期内可

    2024年02月16日
    浏览(45)
  • (十)汇编语言——CALL和RET指令

    相信大家肯定在C语言里面接触过函数这个概念,或者是一些高级语言里面的方法,那么汇编语言有没有这样类似的概念呢,答案是当然的,接下来就让我们来介绍一下汇编的模块化程序设计。 这个CALL指令呢,我们是第一次接触,它主要的作用就是调用子程序,实质上就是进

    2024年02月05日
    浏览(10)
  • 微机原理 || push & pop 指令 (详解+例题)

    考试真的考了push和pop ,那个加减到底是什么? 考试要记:  PUSH 源    -2       字 操作(以字为单位)     例:   PUSH AL 错   必须 字 为单位   POP    源    +2       一定注意是十进制的2,注意和16进制单位转换 入栈和出栈的次序要符合后进先出原则,即: PUSH和POP一般是

    2024年02月06日
    浏览(10)
  • 汇编语言——第10章 CALL和RET指令

    汇编语言——第10章 CALL和RET指令

    目录 引言 10.1 ret和retf 检测点10.1 10.2 call指令 10.3 依据位移进行转移的call指令 检测点10.2  10.4 转移的目的地址在指令中的call指令 检测点10.3  10.5 转移地址在寄存器中的call指令 检测点10.4  10.6 转移地址在内存中的call指令 检测点 10.5 10.7 call和ret的配合使用 10.8 mul指令 10.9 模块

    2023年04月16日
    浏览(13)
  • 嵌入式:ARM汇编语言程序设计基础教程

    嵌入式:ARM汇编语言程序设计基础教程

    ① 合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。 ② CPU寄存器数量有限,在程序中,大多数操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆栈操作使用SP/R13等),程序中要合理分配各寄存器的用途。 用计算机语言,对数据结

    2023年04月23日
    浏览(23)
  • C语言代码的x86-64汇编指令分析过程记录

    C语言代码的x86-64汇编指令分析过程记录

    先通过Xcode创建一个terminal APP,语言选择C。代码如下: 在return 0处打上断点,并且Xcode菜单里选择Debug|Debug Workflow|Always Show Disassembly,点击运行。这时候断点会跳到汇编代码里,得到汇编代码如下: 首先介绍下面会用到的几个寄存器: rip : 程序计数寄存器 rsp : 栈指针寄存器

    2024年02月14日
    浏览(15)
  • Keil MDK配置ARM汇编/C语言混合开发环境

    Keil MDK配置ARM汇编/C语言混合开发环境

    1. 安装Keil MDK 安装方法这里不再说明,懂得都懂!🐶 2. 安装ARM开发包 在Keil MDK5之后,不再原生支持ARM7/9,需要自行安装软件包,链接在这,注意安装与自己MDK版本对应的那个包 我的版本是5.18,下载之后傻瓜式安装,因为它会自动检测你MDK所在的位置。 3. 新建工程 注意:选

    2024年02月02日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包