R0-R3    

用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。

被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。

R4-R10

被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。

R11- fp(frame pointer)寄存器

即可以用来记录回溯信息,也可以当做局部变量来使用

R12-内部调用暂时寄存器 ip

它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。
在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。

R13 -栈指针 sp

用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专

用堆栈,也就是ARM处理器允许用户程序有六个不同的堆栈空间,ARM处理器中的R13被用作SP。当不使用堆栈时,
R13 也可以用做通用数据寄存器.

当程序的运行进入异常模式时,可以将需要保护的寄存器放入R
13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的
正常执行。

R14-链接寄存器 LR

在ARM体系结构中LR的特殊用途有两种:

一是执行子程序调用指令(BL )时,会自动完成将当前的PC的值减去4的结果数据保存到LR寄存器。即将调用指令的下紧邻指令的地址保存到LR。返回时将lr赋给pc即可

二是当异常发生时,会自动完成将当前的PC保存到LR寄存器,返回时将lr-4赋给pc即可,因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。

为什么异常发生时,需要  sub lr, lr, #4 ?

是因为arm流水线,也就是执行第1条指令,第2条指令进行译码,将第3条指令从存储器中取出,那么pc当前等于pc+8

所以在异常发生时,此时lr=pc+8,但是pc+4是没有被执行的,所以异常返回时需要返回到(lr-4)地址上,执行已经译码的地址上.

(实例代码地址链接: 使用stmdb和ldmla实现中断 )

R15-程序计数器 PC

PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器

R16-CPSR(CurrentProgram Status Register,当前程序状态寄存器)

CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

R0~R16寄存器作用相关推荐

  1. 寄存器(R0~R16)以及从SysTick系统时钟理解RTOS移植初始化

    移植系统最重要的细节之一就是配置系统时钟 第一次玩RT-Thread,发现同样的程序逻辑,测试现象不一样,从现象很明显看出来是时钟频率配置不一样. 由于之前玩STM32几乎没有关注过系统时钟的初始化, ...

  2. CPU各个寄存器作用

    程序员的代码最终的实现就是对寄存器和内存进行一些操作,知道CPU中各个寄存器的作用,能够对代码有更深刻的了解. 文章目录 CPU各个寄存器作用(8086): CS,IP bx,si,di,bp ss, ...

  3. CPU中寄存器作用及说明

    各种计算机的CPU可能不同,但是在CPU中至少至少要有六类寄存器:①指令寄存器(IR):②程序计数器(PC):③数据地址寄存器(AR):④缓冲寄存器(DR):⑤通用寄存器(R0~R3);⑥状态字寄存器 ...

  4. Cortex-M3 R0~R15寄存器组

    [R0~R12通用寄存器] R0~R12都是32位通用寄存器,用于数据操作.其中: R0~R7为低组寄存器,所有的指令都可以访问. R8~R12为高组寄存器,只有32位Thumb2指令和很少的16位T ...

  5. 【汇编】各个寄存器作用详解

    寄存器 英文名称:Register 寄存器定义 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中,包含的寄存器有指令寄存器( ...

  6. 几种常见的寄存器作用

    EDX.EAX.ECX.EBX寄存器的作用 一般寄存器:AX.BX.CX.DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI.DI SI:来源索引暂存器,D ...

  7. 各种寄存器作用(汇总)

    32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...

  8. eax, ebx, ecx, edx, esi, edi, ebp, esp 各寄存器作用

    eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器.如果用C语言来解释,可以把这些寄存器当作变量看待. 比 ...

  9. scratch寄存器作用说明

    ARM架构中使用R12作为子程序间的scratch寄存器 (ATPCS中规定). 可以将R12 用于保存SP,在函数返回时使用该寄存器出栈,记作ip. 或者又比如: Uboot程序中主程序调用 cpu ...

最新文章

  1. 大学毕业没有实习经历_我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的...
  2. Jenkins(1)
  3. php执行rsync,使用rsync工具构建php项目管理平台,rsync项目管理
  4. 实时监控Cat之旅~配置Cat集群需要注意的问题
  5. Linux-重启与压缩命令
  6. 剑指offer-week1
  7. Linux 命令之 ls -- 列出指定目录下的内容
  8. 消息队列面试 - 如何进行消息队列架构设计?
  9. 路由表 (2012-03-27 12:57)
  10. makefile编译脚本
  11. python代码示例-Python3 实例
  12. 固态硬盘SSD的SLC与MLC和TLC三者的区别
  13. 怎么练字才会有效果,多久才能有体现
  14. 桌面计算机快捷打不开,桌面快捷方式打不开怎么办【解决方法】
  15. 数组输出c语言getchar,C语言入门 — getchar
  16. excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...
  17. unity Input.GetTouch
  18. c语言职工工资信息表,C语言职工工资理系统.doc
  19. 涂鸦智能2021年Q1营收5690万美元:亏损规模扩大,已跌破发行价
  20. 高级育婴师须知的育儿细节

热门文章

  1. 【怎么安装Win7桌面主题】
  2. 使用cookie登录网站(人人网)
  3. Unity教程||Unity添加中文字体||Unity知识记录--制作UI粒子特效
  4. matlab 热传导 建模,热传导基本理论及建模.pdf
  5. 使用 Shell 脚本监控主机,实现主机性能监控
  6. 义隆单片机c语言例程,简单的义隆单片机LED闪烁C程序
  7. 我的PSoC学习(一)(PSoC Creator 2.0+win7+CY8C38):入门级别的五个工程
  8. 脉冲信号和电平的区别
  9. 一文教懂你关于Elasticsearch的安装配置
  10. 踏上嵌入式之路,一去不复返!