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

1、ARM 寄存器组介绍

ARM 处理器一般共有 37 个寄存器,其中包括:

(1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。
(2) 6 个状态寄存器,都是 32 位的寄存器。
ARM 处理器共有 7 种不同的处理器模式:
用户模式(User),快速中断模式(FIQ),普通中断模式(IRQ),管理模式(Svc),数据访问中止模式(Abort),未定义指令中止模式(Und),系统模式(Sys),
在每一种处理器模式中有一组相应的寄存器。在任意一种处理器模式下,可见的寄存器包括 15 个通用寄存器(R0~R14)、一个或者二个状态寄存器以及程序计数器(PC)。在所有的寄存器中,有些是各模式共用同一个物理寄存器,有些寄存器是各个模式自己拥有独立的物理寄存器在这里插入图片描述

其中 r0~r3 主要用于子程序间传递参数, r4~r11 主要用于保存局部变量,但在 Thumb 程序中,通常只能使用 r4~r7 来保存局部变量; r12 用作子程序间scratch 寄存器,即 ip 寄存器; r13 通常用做栈指针,即 sp; r14 寄存器又被称为连接寄存器(lr),用于保存子程序以及中断的返回地址; r15 用作程序计数器(pc),由于 ARM 采用了流水线机制,当正确读取了 PC 的值后,该值为当前指令地址加 8 个字节,即 PC 指向当前指令的下两条指令地址。

CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CPSR中的值,以便在中断返回之后恢复处理器程序状态。
2.CPSR寄存器详解

所有处理器模式下都可访问当前程序状态寄存器CPSR。CPSR中包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。在每种异常模式下都有一个对用的程序状态寄存器SPSR。当异常出现时,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。

(1)条件码标志

N、Z、C、V,最高4位称为条件码标志。ARM的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。

各个条件码的含义如下:

N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。

Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。

C:其设置分一下几种情况:

           对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。对于有移位操作的非法指令,C为移位操作中最后移出位的值。对于其他指令,C通常不变。

V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。

(2)控制位的作用在图1中可以看出,在这里就不阐述了。

二:CPSR与CPSR_c的区别

  CPSR_c指的是CPSR的低8位控制位CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C)MSR - Load specified fields of the CPSR or SPSR with an immediate constant, or from the contents of a general-purpose register.Syntax:MSR{cond} <psr>_<fields>, #immed_8r MSR{cond} <psr>_<fields>, Rm where: cond is an optional condition code. <psr> is either CPSR or SPSR. <fields> specifies the field or fields to be moved. <fields> can be one or more of:

c control field mask byte (PSR[7:0]) x extension field mask byte (PSR[15:8]) s status field mask byte (PSR[23:16) f flags field mask byte (PSR[31:24]). immed_8r is an expression evaluating to a numeric constant. The constant must correspond to an 8-bit pattern rotated by an even number of bits within a 32-bit word. Rm is the source register.

  C 控制域屏蔽字节(psr[7:0])X 扩展域屏蔽字节(psr[15:8])S 状态域屏蔽字节(psr[23:16])F 标志域屏蔽字节(psr[31:24])

常用于MRS或MSR指令,用于psr中的值转移到寄存器或把寄存器的内容加载到psr中.
如:

MSR CPSR_c,#0xd3

三、R0-R15寄存器 根据“ARM-thumb 过程调用标准”:
R0-R3 用作传入函数参数,传出函数返回值。在子程序调用之间,可以将 r0-r3 用于任何用途。
被调用函数在返回之前不必恢复 r0-r3。如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。
R4-R11 被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,它在返回之前必须恢复这些寄存器的值。
R12 是内部调用暂时寄存器 ip。它在过程链接胶合代码(例如,交互操作胶合代码)中用于此角色。
在过程调用之间,可以将它用于任何用途。被调用函数在返回之前不必恢复 r12。
R13 是栈指针 sp。它不能用于任何其它用途。sp 中存放的值在退出被调用函数时必须与进入时的值相同。
R14 是链接寄存器 lr。如果您保存了返回地址,则可以在调用之间将 r14 用于其它用途,程序返回时要恢复
R15 是程序计数器 PC。它不能用于任何其它用途。
注意:在中断程序中,所有的寄存器都必须保护,编译器会自动保护R4~R11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/254400.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

x64 汇编 参数传递

参数传递在不同的系统上是不一样的 称作 calling convention 调用约定 windows rcx,rdx,r8,r9 用来存储整数或指针参数&#xff0c;按照从左到右的顺序 xmm0,1,2,3 用来存储浮点参数 其余参数会压入栈中。 linux 当参数在 6 个以内&#xff0c;参数从左到右依次放入寄存器:…

汇编和c语言函数的参数,C函数与汇编函数之间参数及返回值传递方法

AAPCS对ARM结构的一些标准做了定义,在这里我们只重点介绍函数调用部分,如图8所示,AAPCS为ARM的R0~R15寄存器做了定义,明确了它们在函数中的职责: 图 8 AAPCS关于ARM寄存器的定义 一、函数调用时的规则如下: 1、 父函数与子函数间的入口参数依次通过R0~R3这4个寄存器传递。…

台式计算机配置参数,整机配置参数以及性能测试_台式电脑评测-中关村在线

我们首先来看一看同方E500的硬件配置情况。 根据AIDA64所示,同方E500搭载了i5-7400处理器、8GB内存、128GB建兴固态硬盘以及1TB西部数据机械硬盘。这个配置对于商务办公机来讲是非常合理的,在性能与成本之间得到了最佳的平衡。那么具体性能表现又是如何呢?我们来继续往下看。…

此计算机核心参数,买电脑如何选CPU?这三个参数一定要看!

原标题&#xff1a;买电脑如何选CPU&#xff1f;这三个参数一定要看! CPU是电脑中的核心&#xff0c;也可以说是电脑的大脑&#xff0c;一直以来CPU与GPU那个重要都是争论不休的话题&#xff0c;四月份升级九代酷睿处理器的机械师笔记本拥有怎样的升级体验呢?高性能玩家该通过…

5G NR首版标准R15解读

5G定义了增强型移动宽带&#xff08;eMBB&#xff09;、超可靠低延迟通信&#xff08;URLLC&#xff09;、大规模机器类型通信&#xff08;mMTC&#xff09; 三大场景。针对这三大场景&#xff0c;在2018年6月已完成的3GPP R15标准不仅定义了5G NR&#xff08;新无线&#xff0…

oppo r15 android 8,抢不到小米8,就用OPPO R15吧

抢不到小米8&#xff0c;就用OPPO R15吧 2018-06-09 17:10:13 17点赞 21收藏 49评论 最近小米8好像很热门&#xff0c;于是&#xff0c;突然就想买个了&#xff0c;反正都是刘海屏千篇一律的手机&#xff0c;还是10年前好&#xff0c;手机款式都是百花齐放&#xff0c;各有各特…

6.S081——补充材料——RISC-V架构中的异常与中断详解

0.briefly speaking 我在阅读Xv6源码过程中对很多概念感到困惑&#xff0c;想到也许会有其他人对此秉持同样的困惑&#xff0c;所以我将我的研究和学习过程总结下来并编篡成如下的博客。本篇博客想对RISC-V标准中有关中断和异常的概念进行一个梳理&#xff0c;考虑RISC-V标准的…

android微信逆向工程,iOS逆向 - 微信自动添加好友

相关源码:Github地址 一、前言 本篇主要实现在微信上自动添加好友&#xff0c;从而熟悉 iOS 逆向分析的过程。 二、 工具 2.1 MacBook 软件 制作 Tweak 的工具 端口转发&#xff0c;可以让我们通过usb连接手机进行ssh、lldb调试等。主要使用python-client目录下的文件 dump 目标…

免费查询微信好友还在不在了~

最近一周经常被一些人发一些检测好友的消息&#xff0c;目测这东西好像是有条件收费的&#xff0c;然后就想想python是不是能写个免费版的好友检测。 具体可以看看运行结果&#xff1a; 编写脚本会用到以下几个模块 coloramacoloredlogshumanfriendlylxmlqrcoderequestssixrequ…

如何找回删除的微信好友?

如何找回删除的微信好友&#xff1f; 本篇主要是说朋友圈无互动过&#xff0c;也没有任何标签和其他特殊标记&#xff0c;不知道微信号&#xff0c;手机号的微信好友&#xff0c;误删之后如何通过恢复数据方式恢复好友的办法。百度之后主要有如下几种方法&#xff1a;1.朋友圈有…

在Centos Stream 9上Docker的实操教程(四) - Docker腾讯云远程仓库和本地私有仓库

在Centos Stream 9上Docker的实操教程 - Docker腾讯云远程仓库和本地私有仓库 本地镜像发布到腾讯云注册开通腾讯云初始化个人版服务创建仓库推送拉取镜像 私有仓库结语 本地镜像发布到腾讯云 由于官方的docker hub访问由于网络原因&#xff0c;可能会比较慢&#xff0c;博主推…

html输入框 多出的字隐藏,input 输入框获得/失去焦点时隐藏/显示文字(jquery版)

input 输入框获得和失去焦点时隐藏或者显示文字我们先看下效果图 输入框默认状态: 输入框获取焦点状态: 大家可以看效果图的搜索输入框&#xff0c;默认显示着“用户名/Email”的提示&#xff0c;当这个 input 输入框获得焦点时&#xff0c;就自动清空等待用户输入&#xff0c…

【C++】函数高级 - 默认参数,占位参数,函数重载基本语法,函数重载注意事项

No.Contents1【C】基础知识 - HelloWorld&#xff0c;注释&#xff0c;变量&#xff0c;常量&#xff0c;关键字&#xff0c;标识符2【C】数据类型 - 整型&#xff0c;sizeof&#xff0c;实型&#xff0c;字符型&#xff0c;转义字符&#xff0c;字符串类型&#xff0c;布尔类型…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github&#xff1a;https://github.com/GDUT-Rp/LeetCode 题目&#xff1a; 给你一个整数数组 …

chatgpt赋能python:Python中的画图——创建漂亮的可视化图像

Python中的画图——创建漂亮的可视化图像 Python是一个高度可编程的语言&#xff0c;因此它非常适合用于创建各种类型的可视化。 在本文中&#xff0c;我们将介绍Python中的画图。我们将讨论如何使用Python和一些流行的数据可视化库来创建漂亮的可视化图像。我们还将探讨如何…

【Linux】Linux文件权限的理解

目录 一、Shell是什么&#xff1f; 1、Shell承担用户和内核间的翻译工作 2、拒绝用户非法请求&#xff0c;保护内核 3、派生子进程执行用户指令 二、用户切换与提权 1、普通用户与root用户的切换 2、普通用户指令短暂提权 三、文件权限的理解 1、文件权限角色的权限文…

Linux文件的rwx含义,Linux文件权限rwx简单了解

Ⅰ 了解Linux下的文件权限 如上图所示,ll命令详细展示当前目录下的文件或者子目录信息 红框标注的即为此文件或者目录的权限 【第一行文件10.c的权限以-开头,用来说明这是一个文件;第四行code目录的权限以字母d开头,用来标注code是目录】 关于文件权限,我们要先了解有那些…

Linux文件权限管理命令

今天继续给大家介绍Linux基本知识&#xff0c;本文主要内容是介绍Linux文件权限相关命令。 一、chown命令修改文件属主 在Linux系统中&#xff0c;chown命令可以更改文件的属主和属组&#xff0c;chown命令使用示例如下&#xff1a; chown user.user target chown user:user…

Linux文件权限修改

Linux文件权限修改 一.文件属性查看 使用root创建一个1.txt文件进行实例 touch /opt/1.txt查看文件属性 ls -l /opt/1.txt可以看到图中红色框框内列出了文件的信息属性&#xff0c;从左到有进行性详解 1. -rw-r--r-- 参考下图进行理解 共有10个字符&#xff0c;如果第一个…

Linux文件权限的设置

本文章主要介绍了对Linux文件的权限以及如何设置权限。 一、查看文件的权限与属性 ls -l 或者 ll查看文件属性 二、可以列出如下图所示的一些信息 -rw-r--r-- 第一位代表文件类型 d 表示目录 l 表示链接文件 - 表示普通文件 b 表示快设备文…