寄存器R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针,而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。

由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。

寄存器R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份。

在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。
执行以下任意一条指令:

MOV PC, LR
BX LR

在子程序入口处使用以下指令将PC存入堆栈:

STMFD SP!,{<registers>, LR}

对应的,使用以下指令可以完成子程序返回:

LDMFD SP!,{<registers>, PC}

R14也可作为通用寄存器。

寄存器R15用作程序计数器(PC),在ARM状态下,位[1:0]为0,位[31:2]用于保存PC,在Thumb状态下,位[0]为0,位[31:1]用于保存PC(在ARM 状态下,R15  的值总是能被4 整除,也就是R15 寄存器的最低2 位总是 0;Thumb 状态下,R15 的值总是能被2 整除,也就是R15 寄存器的最低位总是0。)。
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。

需要注意的是当使用STR/STM保持R15时,保存的可能是当前指令地址值加8字节,也可能是加12字节,到底是哪种方式,取决于芯片具体设计方式。可以通过代码开验证芯片使用的是哪种实现方式:

SUB R1, PC, #4    #R1中存放下面STR指令的地址
STR PC, [R0]     #将PC=STR地址+offset保存到R0中
LDR R0, [R0]
SUB R0, R0, R1    #offset = PC - STR地址

R0返回该芯片所采用的地址偏移量。

这种读取PC值和写入PC值得不对称的操作需要注意。如指令 MOV PC, PC 将程序跳转到当前指令下面的第2条指令处执行。第2个PC寄存器读出的值为当前指令的地址加8,这样对ARM指令而言写入PC寄存器的是当前指令下面的第2条指令的地址。类似的指令还有ADD PC, PC, #0。

ARM寄存器R13/R14/R15相关推荐

  1. ARM寄存器(R13/R14/R15)

    一.ARM工作状态下的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及 ...

  2. arm寄存器之r14,r15

    (1)PC是程序计数器,存储将要执行的指令地址 (2)LR是链接寄存器,是ARM处理器中一个有特殊用途的寄存器,当调用函数时,返回地址即PC的值被保存到LR中(mov lr,pc). (3)IR是指令 ...

  3. ARM 寄存器 和 工作模式了解

    一. ARM 工作模式 1.   ARM7,ARM9,ARM11,处理器有 7 种工作模式:Cortex-A 多了一个监视模式(Monitor) 2.  用户模式:非特权模式,大部分任务执行在这种模式 ...

  4. ARM处理器的运行模式和ARM寄存器

    一.ARM处理器共有7种运行模式  处理器模式 描述 用户模式(User,usr) 正常程序执行的模式 快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理 外部中断模式(IRQ,irq) 用于 ...

  5. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42375701 相关资源下载 :  -- 三星 ARM Archit ...

  6. Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)

    目录 0.ARM架构的历史简介 1.Cortex-A7 MPCore(即多核) 简介 2.Cortex-A 处理器九种运行模式 3.Cortex-A 寄存器组(内核寄存器) 3.1通用寄存器 3.1. ...

  7. ARM寄存器及功能介绍/R0-R15寄存器

    1.ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器,其中包括: (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器. (2) 6 个状态寄存器,都是 32 ...

  8. ARM 寄存器 详解

    From( ARM 寄存器详解 ):https://blog.csdn.net/sandeldeng/article/details/52954781 ARM 汇编基础教程:2.数据类型和寄存器:ht ...

  9. linux arm寄存器,ARM寄存器总结

    ARM处理器共有37个寄存器: 1) 31个通用寄存器,包括程序计数器(PC).这些寄存器都是32位的: 2)6个状态寄存器.这些寄存器也是32位的,但是只使用了其中的12位. ARM通用寄存器 通用 ...

最新文章

  1. C++学习之:复制和粘贴文件/文件夹
  2. 数据结构-浙大 MOOC 笔记一 基本概念
  3. 重启openssl服务linux,Nginx的启动、停止与重启---linux
  4. python基本语法:字典
  5. 通过还款计划表监控还款异常
  6. Redis基础学习(2)
  7. PHP错误处理注册机制
  8. HCNP——静态路由
  9. 未成年人勿进 谨以献给1980~1990出生的人(二)
  10. kubeadm 方式搭建k8s笔记
  11. python引用计数的原理_深入Python中引用计数
  12. SAP MM 常见移动类型及定义
  13. 不能有比这个再靠谱的星座分析了
  14. 网络类型 ---- PAP认证配置 ---- CHAP认证----隧道技术
  15. html网页多人聊天,html5+js+.Net的即时多人聊天
  16. Django 后台admin管理页面添加简易导出/下载数据功能的两种方法
  17. preg_match() 函数
  18. linux合并pdf命令,科学网—[转载]linux下利用命令行工具pdftk对PDF进行合并分割(转载) - 崔鹏碧的博文...
  19. pogo pin连接器与排针、排母的寿命区别
  20. 计算机网络第四章答案

热门文章

  1. 17周项目五(1)。百钱买百鸡
  2. java毕设开源啦,springboot+bootstrap库存管理系统
  3. 第一辆5G汽车要在中国上路!真·5G车联网,体验如何?
  4. #128221; 百思不得姐 video
  5. 972信息检索 | 第二章 信息检索的方法和技术
  6. 在36岁的本命年,我失业了
  7. itest监考机制_干货 | iTEST管理员组织大型无纸化考试的经验分享
  8. 2020-2021学年第二学期期末考试《道路勘测设计》大作业
  9. Reflector工具使用
  10. 【融职培训】Web前端学习 第3章 JavaScript基础教程18 BOM概述