R0~R16寄存器作用

news/2024/11/17 3:40:19/

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


http://www.ppmy.cn/news/182334.html

相关文章

R17 redcap

微信公众号同步更新欢迎关注同名modem协议笔记 在5G时代,某些场景的终端并不需要特别复杂,只要满足成本低,功耗小,尺寸小等要求即可,例如视频监控,可穿戴设备,工业无线传感器等,red…

已发布最新的Android 3.0 SDK(R10)及ADT10.0.0

Android 3.0 SDK(R10)及ADT10.0.0正式发布 Android 3.0 SDK(R10)及ADT10.0.0正式发布。SDK工具已经升级至r10版本,ADT插件也已经更新到10.0.0,API等级全部更新至11,Android平板应用开发的准备工…

2-10进制数转换

//题目:每组输入两个数 n,m,中间空格隔开。n代表数值,m代表数制(2进制,10进制)多组输入,遇n和m等于0结束。 //样例输入 //10 2 //10 10 //0 0 //样例输出 //2 //1010 / //1000 0000-1111 1111 128-255 //1000 000-111…

arm基本了解(笔记)

创建项目:首先建一个文件夹,然后建立.s文件 File-new-名字-samsung-s3c2410A-否(自己写汇编程序)-target-source ..-add file .. -.s文件(查看-文件扩展名)-写汇编代码 交叉编译工具链 project-manage-con ..-folders-勾选GCC(K…

华为OD机试真题 Java 实现【字符串通配符】【2022Q4 200分】

一、题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。 要求: 实现如下2个通配符: :匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同)?:匹配1个…

NikonControlD5500二次开发

1、开发环境及语言 基于VS2019的C#语言、 2、主要解决的问题: 利用C#开发NIKON相机D5500,下载下来,可供自己继续研发; 3、效果展示 4、下载地址 https://download.csdn.net/download/hhgao2012/16239214

剑指 Offer 57. 和为s的两个数字

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸剑指 Offer 🛹Linux 📕 学习格言:博观而约取&…

DELL LATITUDE E5510 笔记本电脑屏幕闪烁问题的解决.

DELL LATITUDE E5510 笔记本电脑屏幕闪烁问题的解决. 最近, 笔记本电脑屏幕闪烁,现象为隔几十秒到几分钟不等,屏幕闪烁一下.不定时. 检查多日无果.发现只用电池时不闪烁..插上电源时有时会闪..而在插上电源的瞬间会黑屏.. 估计可能是电源插头接触不良所至.将其八下来,重新插…