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. html盒子有哪些属性,盒子模型有哪些属性 在html5中哪些元素具有盒子模型
  3. 西贝莜面村如何建立自己的私域流量池?
  4. 关于【cocos2dx-3.0beta-制作flappybird】教程在3.2project中出现找不到CCMenuItem.h的解决方法...
  5. abp api返回自定义结构体
  6. Java常量池储存什么_JAVA常量池中存储的常量是什么
  7. JavaScript中onblur事件
  8. Unity实现将图片上传到服务器功能
  9. matlab 双层规划求解,双层规划模型的遗传算法求解的Matlab源码
  10. PPT另存为PDF图片去白边
  11. 使用计算机的时正确的开机步骤,电脑启动时选择启动模式的方法步骤图
  12. 哈工大人工智能暑期课实践项目——手写体识别四则运算
  13. TestCenter测试管理工具功能详解四(I)
  14. bat写暴力破解系统密码
  15. C#调用C++ dll中uchar*参数
  16. 函数的参数和函数的值
  17. NC | 西湖大学鞠峰组在聚氯乙烯塑料微生物降解方向取得新突破
  18. 狂赚 1200 亿,差点收购苹果,影响千万程序员,那个叫做太阳的公司却陨落了!...
  19. mysql悲观锁会有脏数据吗_mysql悲观锁原理详解
  20. UiPath 安装与下载

热门文章

  1. 论文笔记Dory:Arguments for Inner Products and Polynomial Commitments
  2. 未开启VT-x造成VirtualBox安装XP系统后蓝屏0x000000D1错误一例
  3. 组态王设置寄存器地址方法以及采集频率的重要性
  4. js-xlsx js处理excel 通过sheetJSON生成Excel文件
  5. 你可能知道皮实省油 却不知道这款SUV全新升级还限量了
  6. 操作系统实验Lab 1:Xv6 and Unix utilities(MIT 6.S081 FALL 2020)
  7. 嵌入式系统原理及应用《基于ARM Cortex-M3 内核的STM32F103系列微控制器》思维导图
  8. VxWorks驱动编写流程(非VxBus模式下)
  9. 用python语言编写多边形图片区域映射成矩形区域的代码
  10. C语言编写学生成绩管理系统