1. b与bl指令的作用是什么?

b与bl指令的作用:实现程序跳转,也就是调用子程序。

2. b与bl指令的区别是什么?

b与bl指令的区别:

b指令:简单的程序跳转,跳转到到目标标号处执行。

bl指令:带链接程序跳转,也就是要带返回地址。在发生跳转前,将当前PC-4保存到R14中。也就是返回地址存在R14中,所以可以在子程序返回时只要MOV PC, LR即可。

3. 什么是R14?

在ARM处理器中使用 R14实现对断点和调用点的记录,即使用R14用作返回链接寄存器(LR )。

在硬件上和指令执行上,CPU自动完成相应返回点的记录。在ARM 汇编语言程序设计时,R14和LR通用。

3.1

ARM处理器相应异常时,会自动将当前的PC值保存到LR寄存器。

3.2

ARM处理器执行子程序调用指令(BL )时,会自动将当前的PC值减去4并保存到LR寄存器,即将调用指令的下紧邻指令的地址保存到LR。

ARM处理器针对不同的模式,共有6个链接寄存器资源(LR ),其中用户模式和系统模式共用一个 LR,每种异常模式都有各自专用的R14 寄存器(LR)。
   这些链接寄存器分别为 R14、R14_svc、R14_abt、R14_und、R14_irq、R14_fiq,

程序设计者要清晰处理器的模式与相应寄存器的对应关系,都是使用 R14,但不同模式下的R14 不是同一个物理资源,其内容可能天壤之别。
   R14 不用做链接寄存器(LR )时,也可以用做通用数据寄存器。

4.

   ARM 处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC 寄存器,被各模式共用。R15 有32 位宽度, 可以直接寻址4GB的地址空间(2^32 = 4G)。

   ARM 体系要求32 位长的ARM 指令在存储器中必须字对齐存储,16 位长的 Thumb 指令必须半字对齐存储

因此,在ARM 状态下,R15的值总是能被4 整除,也就是R15寄存器的最低2位总是0; Thumb 状态下,R15的值总是能被2整除,也就是R15寄存器的最低位总是0。

.

ARM汇编: B、BL 与R14(LR)、R15(PC)的更多相关文章

  1. GNU ARM 汇编基础

    ARM GNU汇编基础 0 前言 全文补充提醒: 笔者在阅读ARM官方文档及查阅实际的u-boot源码中的汇编代码后,发现了一些不同于ARM官方文档中的汇编语法,查阅相关资料后,才发现主要由于汇编器的 ...

  2. ARM 汇编指令

    ARM汇编程序特点: l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...

  3. iOS 逆向之ARM汇编

    最近对iOS逆向工程很感兴趣. 目前iOS逆向的书籍有: <Hacking and Securing IOS Applications>, <iOS Hacker's Handboo ...

  4. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  5. ARM汇编指令的一些总结-转

    ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...

  6. ARM汇编编程基础之一 —— 寄存器

    ARM的汇编编程,本质上就是针对CPU寄存器的编程,所以我们首先要弄清楚ARM有哪些寄存器?这些寄存器都是如何使用的? ARM寄存器分为2类,普通寄存器和状态寄存器 寄存器类别 寄存器在汇编中的名称 ...

  7. ARM汇编关键知识点总结(转)

    1.LDR R1, =COUNT 意思是将 COUNT 变量的地址放到 R1中LDR R1, COUNT 意思是将 COUNT 变量地址里面的内容赋给 R1 2. Load-Store 结构——这个应 ...

  8. 12 ARM汇编

    Android系统采用java作为平台软件基础开发语言,NDK使Android平台可以运行C/C++代码这些代码汇编成ARM的elf可执行文件. 原生程序生成过程 经历4步:1.预处理2.编译3.汇编 ...

  9. arm汇编指令

    ARM处理器的指令集可以分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.加载/存储指令.协处理器指令和异常产生指令6大指令 一.跳转指令 跳转指令用于实现程序流程的跳转 跳转指令分类 Ⅰ ...

  10. ARM汇编与C混合编程

    GNU内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编 程序中使用饱和算术运算(Saturati ...

随机推荐

  1. Python 标准类库-因特网数据处理之Base64数据编码

    该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能.它为RFC 3548中指定的编码提供编码和解码功能.定义了Base16.Base32和Base64算法,以及事实上的 ...

  2. lombok到底都用来做什么

    前言:我使用lombok一般都是用在实体类的外面写个@data省得写getsettostring方法,今天详细了解一下关于lombok的有一些实用技巧 @Cleanup //用于IO流的关闭,给局部变 ...

  3. SpringBoot2.7 霸王硬上弓 Logback1.3 → 不甜但解渴

    开心一刻 一大早,她就发消息质问我 她:你给我老实交代,昨晚去哪鬼混了? 我:没有,就哥几个喝了点酒 她:那我给你打了那么多视频,为什么不接? 我:不太方便呀 她:我不信,和你哥们儿喝酒有啥不方便接视 ...

  4. 11、Git之自建项目托管平台(GitLab极狐)

    11.1.简介 Github 是国外的项目托管平台,由于网络问题,在国内访问和使用不是很方便. Gitee 是国内的项目托管平台,虽然在访问和使用上挺方便的,但依然让人担忧项目代码可能会被泄露. 因此 ...

  5. 【Windows】使用Dism++打包系统

    目的: 封装自己装好的操作系统,以便后续系统重装提高效率 纯净原生系统需要自己搭建开发环境,许多系统库也没有添加,费劲 网络下的整合包总是参杂些垃圾广告,不如自己封装一个 思路: 利用VMware虚拟 ...

  6. 【转载】SCI审稿过程中的几种状态

    原文地址: http://cjsphd.blog.163.com/blog/static/44718111201191175154300/ 审稿中涉及到的人: EIC-Editor in Chief ...

  7. kaggle上的jax框架的环境配置(TPU版本)

    导出时间: 2024-01-18 21:00:37 星期四 python版本: Python 3.10.13 absl-py==1.4.0 accelerate==0.25.0 aiofiles==2 ...

  8. PowerBI_一分钟学会计算门店开业前3天销售金额_计算列及度量值方法

    在某些特殊场景,我们往往需要去计算一些特定的组别的聚合数据 今天,就以计算门店开业前3天的销售情况,来学习一下,利用计算列和DAX度量值,两种快捷计算此类问题的方案. 一:XMIND 二:示例数据 2 ...

  9. win+jenkins+git+allure+tomcat+jdk部署(万人坑)

    万人坑:之所以叫万人坑,是一些网站真的是非常非常非常坑,且不说按照他们的方法一次都没成功,还遇到了各种千奇百怪的问题,浪费了本人3.1415926h的时间,真想给他们竖起一个超大号的倒拇指.下面开始踩 ...

  10. 美化一下WPF自带得ToolTip

    对照一下原版和美化以后得版本 原版: ---------- 新版: 新增了 圆角 和 阴影效果; 第一步:新建项,最下面有一个自定义控件,取名为CornerToolTip. 第二步:系统会创建一个Co ...