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

news/2025/2/3 10:48:54 标签: arm开发, BL, BLR, BL与BLR

文章目录

    • 跳转指令简介
      • ARM 跳转指令集列表
      • BLBLR 的区别

跳转指令简介

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__33">BLBLR 的区别

BLBLR 执行结果是将 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

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


http://www.niftyadmin.cn/n/1416926.html

相关文章

angular ui-router

ui-router 用法 页面上用ui-sref directives 他的值就是state的名字,从config找到这个值为a标签添加href 属性, .连接实现嵌套功能,比如ui-sref 的值是router2.list 是router 页面下在嵌套一个list 页面。转载于:https://www.cnblogs.com/wss…

http_load讲解

转自[开源人]#-----------http_load讲解------------------------------------# Web服务器压力测试工具常见的有http_load、webbench、ab和Siege,我今天主要跟大家分享一下,我在工作中对http_load使用的总结。一、下载http_load 下载地址:htt…

【Hello 2018 C】Party Lemonade

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 处理出凑够2^j最少需要花费多少钱。 即试着把第i种物品买2^(j-i)个,看看会不会更便宜 记录在huafei[0..31]中 然后对于L; 把它转成二进制。累加二进制中对应为1的地方的对应huafei (如果某个高位的1不加的话,肯…

Java并发与多线程教程(3)

Java中的锁 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关…

八、IO优化(1)磁盘簇

一、硬盘结构1. 硬盘基本结构硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片。不同容量硬盘的盘片数不等。每个盘片有两面,每个面都有一个磁头(Head),习惯用磁头号来区分。盘片被分成许多扇形的区域,每…

ZTree 获取选中的项

var zTreeOjb $.fn.zTree.getZTreeObj("zTreeId"); //ztree的Id zTreeId获取复选框/单选框选中的节点:var checkedNodes zTreeObj.getCheckedNodes();获取光标选中的(selected)var selectedNodes zTreeObj.getSelectedNodes();上面两个函数获取到的都…

那些南下的女孩

一个女孩子,不会没有原因,远远的从她熟悉的地方,远远来到一座陌生的城市工作。 问过几个外省的女孩们,当问到为什么会来到广州工作时候,原因却出奇的统一——因为男朋友在这边。 在我感觉里,她们已经贴上男…

maven项目配置findbugs插件 使用git钩子控制代码的提交

maven项目配置findbugs插件对代码进行静态检测 当发现代码有bug时&#xff0c;就不让用户commit代码到远程仓库里 没有bug时才可以commit到远程仓库中 &#xff08;1&#xff09;新建maven项目 &#xff0c;配置findbugs插件 pom.xml <project xmlns"http://maven.apac…