当前位置:   article > 正文

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

arm指令bl pr


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

跳转指令简介

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

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

ARM 跳转指令集列表

类型指令介绍
条件分支B.condBranch conditionally
条件分支CBNZCompare and Branch if NonZero
条件分支CBZCompare and Branch if Zero
条件分支TBNZTest bit and Branch if NonZero
条件分支TBZTest bit and Branch if Zero
无条件分支BBranch uncondition
无条件分支BLBranch with Link
无条件分支BLRBranch with Link to Register
无条件分支BRBranch to Register
无条件分支RETReturn 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

推荐阅读:
https://reviews.llvm.org/D81402

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/345565?site
推荐阅读
相关标签
  

闽ICP备14008679号