【ARM 常见汇编指令学习 1 -- 跳转指令 BL 与 BLR 区别】

这篇具有很好参考价值的文章主要介绍了【ARM 常见汇编指令学习 1 -- 跳转指令 BL 与 BLR 区别】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


下篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP

跳转指令简介

ARM 中跳转指令主要分为无条件跳转和有条件跳转,有条件跳转是一种根据特定条件进行跳转的指令。它会根据条件码寄存器(Condition Code Register)中的状态,判断是否满足特定条件,然后根据条件的结果决定是否进行跳转。无条件跳转是一种无条件地改变程序执行流程的指令。它会直接跳转到指定的地址,而不需要任何条件判断。

  • 有条件跳转指令,有条件跳转指令的方式很固定。
  • 无条件跳转指令,有常见如下4种:
    • 直接跳
    • 链接跳
    • 间接跳
    • 返回跳,

ARM 跳转指令集列表

类型 指令 介绍
条件分支 B.cond Branch conditionally
条件分支 CBNZ Compare and Branch if NonZero
条件分支 CBZ Compare and Branch if Zero
条件分支 TBNZ Test bit and Branch if NonZero
条件分支 TBZ Test bit and Branch if Zero
无条件分支 B Branch uncondition
无条件分支 BL Branch with Link
无条件分支 BLR Branch with Link to Register
无条件分支 BR Branch to Register
无条件分支 RET Return from subroutine

其中指令的关键字:

  • B 表示分支跳转指令,
  • cond 表示条件跳转,
  • L 表示链接,
  • R 表示从寄存器中查找跳转地址,
  • RET 则返回L类型保存的地址。

BL 与 BLR 的区别

BL 和 BLR 执行结果是将 PC 寄存器值的下一个值(也就是PC+8)放到链接寄存器 LR中, 然后将目的子程序的地址放到 PC 中。 BLR的结果 与 BL类似,但是新的PC的值是从特定的寄存器(如x0)取得

如下是使用 BLR 的例子:

  // Move startup address into a data register
  ldr   x4, =ASM_PFX(CEntryPoint)

  // Set the frame pointer to NULL so any backtraces terminate here
  mov   x29, xzr

  // Jump to PrePiCore C code
  //    x0 = MpId
  //    x1 = UefiMemoryBase
  //    x2 = StacksBase
  blr   x4

_NeverReturn:
  b _NeverReturn

下篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP

推荐阅读:
https://reviews.llvm.org/D81402文章来源地址https://www.toymoban.com/news/detail-729673.html

到了这里,关于【ARM 常见汇编指令学习 1 -- 跳转指令 BL 与 BLR 区别】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【ARM64 常见汇编指令学习 14 -- ARM 汇编 .balign,.balignw,.balign 伪指令学习】

    上篇文章:ARM64 常见汇编指令学习 13 – ARM 汇编 ORG 伪指令学习 下篇文章:ARM64 常见汇编指令学习 15 – ARM 标志位的学习 .balignl 是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的。. balignl 是 .balign 的变体。 .balignl 完整

    2024年02月14日
    浏览(43)
  • ARM64 常见汇编指令学习 11 -- ARM 汇编宏 .macro 的学习

    下篇文章:ARM64 常见汇编指令学习 12 – ARM 汇编函数 的学习 上篇文章:ARM64 常见汇编指令学习 10 – 无符号位域提取指令 BFXIL 在 ARM 汇编中,“ .macro ” 是用来定义一个宏的指令。宏可以看作是一个可以在汇编程序中重用的代码段。当调用宏时,汇编器会将宏的内容插入到调

    2024年02月14日
    浏览(44)
  • 【ARM64 常见汇编指令学习 16 -- ARM64 SMC 指令】

    上篇文章:ARM64 常见汇编指令学习 15 – ARM64 标志位的学习 下篇文章:ARM64 常见汇编指令学习 17 – ARM64 BFI 指令 在ARMv8架构中,同步异常主要包括以下几种: Undefined Instruction :未定义指令异常,当处理器尝试执行一条未定义的指令时会触发。 Supervisor Call (SVC) :这是一种特殊

    2024年02月13日
    浏览(44)
  • 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. 语法  要点: push支持同时将

    2024年02月05日
    浏览(37)
  • 【ARM64 常见汇编指令学习 20 -- ARM 指令 .include与 .asciz 详细介绍】

    在 ARM 汇编语言中, .include 命令用于插入另一个源文件的内容。它的作用类似于 C 语言中的 #include 预处理命令。这个命令通常在源文件的顶部使用,但也可以在任何地方使用。 语法如下: 这里的 \\\"filename\\\" 是你想要包含的文件名。这个文件名可以是绝对路径,也可以是相对于

    2024年02月11日
    浏览(55)
  • 【ARM64 常见汇编指令学习 21 -- ARM RET 与 ERET】

    请阅读 【嵌入式开发学习必备专栏 】 在 ARMv8 架构中, RET 指令用于从函数或者过程返回。它主要负责从当前过程跳转回调用者,并恢复调用者的程序计数器 (PC) 的值。 语法: Xn 是一个可选的寄存器,通常为 X30 (也称为 LR ,链接寄存器),其中包含返回地址。如果没有指

    2024年04月10日
    浏览(143)
  • 【ARM 常见汇编指令学习 3 -- ARM64 无符号位域提取指令 UBFX】

    上篇文章:ARM 常见汇编指令学习 2 – 存储指令 STP 与 LDP 下篇文章:ARM 常见汇编指令学习 4 – ARM64 比较指令 cbnz 与 b.ne 区别 在代码中如何监控寄存器的某1bit, 或者某几bit ? ARM 提供了一个汇编指令:UBFX 就可以用于该功能。 UBFX 有2种语法分别是对32bit 寄存器和64bit寄存器。

    2024年02月15日
    浏览(35)
  • 【ARM 常见汇编指令学习 2 -- 存储指令 STP 与 LDP】

    上篇文章:ARM 常见汇编指令学习 1 – 跳转指令 BL 与 BLR 区别 下篇文章:ARM 常见汇编指令学习 3 – ARM64 无符号位域提取指令 UBFX 在 ARMv8 架构中,STP指令用于将两个通用寄存器的值存储到内存中。STP指令的语法如下: 或 其中: Wt1 和 Wt2 表示两个要存储的32位通用寄存器, Xt

    2024年02月09日
    浏览(41)
  • ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC

    上篇文章:ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍 AArch64指令集中有两条关于缓存维护(cache maintenance)的指令,分别是IC和DC。 IC 是用于 指令缓存 操作; DC 是用于 数据缓存 操作。 IC 和DC指令都属于系统指令(system instruction), 系统指令 还包括 AT,BRB,CFP,CP

    2024年02月14日
    浏览(48)
  • 【ARM 常见汇编指令学习 8 - dsb sy 指令及 dsb 参数介绍】

    上篇文章:ARM 常见汇编指令学习 7 - LDR 指令与LDR伪指令及 mov指令 下篇文章:ARM 常见汇编指令学习 9 - 缓存管理指令 DC 与 IC 数据同步屏障是一种特殊类型的内存屏障。 只有当DSB指令执行完毕后,才会执行程序中位于此指令后的指令。 当满足以下条件时,此指令才会完成:

    2024年02月09日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包