ARM 关键几个寄存器

ARM汇编——PC和LR寄存器理解 寄存器,Arm汇编,PC,LR 阅读详情

arm 寄存器和对应的汇编描述符

这里写图片描述
图中缩写如下:

R:Register;寄存器
PC:Program Counter;程序计数器
CPSR:Current Program Status Register;当前程序状态寄存器
SPSR:Saved Program Status Register;保存的程序状态寄存器
SP:Stack Pointer;数据栈指针
LR:Link Register;连接寄存器
SB:静态基址寄存器
SL:数据栈限制指针
FP:帧指针
IP:Intra-Procedure-call Scratch Register;内部程序调用暂存寄存器

ARM共有37个寄存器,可以工作在7种不同的模式。以下根据上图进行分类的说明:

未分组寄存器r0-r7为所有模式共用,共8个。
分组寄存器中r8-r12,快速中断模式有自己的一组寄存器,其他模式共用,所以有10个。
分组寄存器中r13,r14,除了用户模式和系统模式共用外,其他模式各一组,所以共有2*7 - 2 = 12个。
r15和CPSR共用,共2个;SPSR除了用户模式和系统模式没有外,其他模式各一个,共5个。

所以总数为8+10+12+2+5 = 37个。与此对应的汇编名称表明了它们通常的约定用法。

1. PC(程序计数器) = windows 中 EIP

解析:
处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条
地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具
有某些手段来确定下一条取指指令的地址.程序计数器(PC)正是起到这种作用,所以通常又称之为‘指令计数器’
。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC 决定了程序运行流向。故而,程
序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据.

在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU 按照 PC
的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC 的内容,即每执行一条指令PC增加一个
量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都
是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加“指令字节数”。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目标地址。处理器总是按照PC
指向取指、译码、执行,以此实现了程序转移。

2.堆栈指针寄存器 SP (寄存器 R13)

ARM处理器中通常将寄存器R13作为堆栈指针(SP)。ARM处理器针对不同的模式,共有 6 个堆栈指针(SP),其中
用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专
用堆栈,也就是ARM处理器允许用户程序有六个不同的堆栈空间,ARM处理器中的R13被用作SP。当不使用堆栈时,
R13 也可以用做通用数据寄存器.


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


当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备
份.在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给
R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。
执行以下任意一条指令:
MOV PC,LR
BX LR
在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。

4. PSR 寄存器

条件码标志(Condition Code Flags)
N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否
被执行。
在ARM状态下,绝大多数的指令都是有条件执行的。
在Thumb状态下,仅有分支指令是有条件执行的。

N Negative 如果结果是负数则置位 当用补码表示的带符号数进行运算时,N=1表示运算的结果为负数;N=0表示运算的结果是正数或零。
Z Zero 如果结果是零则置位 Z=1表示运算的结果为零;Z=0表示运算的结果不为零。
C Carry 如果发生进位则置位 有4种方法影响C的值:
l 加法运算:当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。
2 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出)时,C=0,否则C=1。
3 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。
4 对于其他的非加/减运算指令,C的值通常不改变。

V Overflow 如果发生溢出则置位 有2种方法设置V的值:
l 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。
2 对于其它的非加/减法运算指令,V的值通常不改变。
I IRQ 中断禁用
F FIQ 快速中断禁用
T 工作状态位,1为Thumb;0为ARM

ARM架构--(PC)程序计数器寄存器介绍 在异常或中断处理时,当异常发生时,处理器会自动保存当前的PC值到相应模式的LR寄存器中(如R14_irq、R14_svc等),并跳转到异常向量表中对应的异常处理程序。在ARM架构中,PC(Program Counter,程序计数器)是一个特殊的功能寄存器,它存储了下一条待执行指令的地址。: 在函数调用时,通常会使用BL(Branch and Link)指令,该指令会自动将下一条指令的地址存入LR(Link Register)寄存器,然后跳转到目标地址。指令执行时,PC寄存器会被设置为。 阅读详情

相关推荐

ARM中的寄存器

R13作为堆栈指针(SP)。为了更准确地描述堆栈,根据“压栈”操作时堆栈指针的增减方向,将堆栈区分为‘递增堆栈’(SP 向大数值方向变化)和‘递减堆栈’(SP 向小数值方向变化);又根据SP 指针指向的存储单元是否含有堆栈数据,又将堆栈区分为‘满堆栈’(SP 指向单元含有堆栈有效数据)和‘空堆栈’(SP 指向单元不含有堆栈有效数据)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。

m0_53147934的博客 575

物奇5007crash问题dump、栈回溯的四种定位方法

物奇属于RISC-V架构(chapter1_riscv.md · 华中科技大学操作系统团队/pke-doc - Gitee.com),在遇到crash问题时,系统内部会对内存进行相关的保护和检测,当发现异常时会主动调用 IOT_ASSERT,通常会产生相关的 log 文件, 如: ***.c:xxx Asserted!出现异常时的现场 dump 记录,将通用的 32 个 CPU 寄存器 dump 输出。回栈信息记录。出现异常时的堆栈信息以及调用函数地址。

里昂的博客 995

ARM汇编:初识寄存器

文章目录CPU内存寄存器(arm) 汇编语言与机器语言一一对应,每一条机器指令都有与之对应的汇编指令。 CPU 地址总线:它的宽度决定CPU寻址能力,最大为2的总线宽度次方。8086宽度20,所以最大寻址为2的20次方为1M。 数据总线:它的宽度决定单次数据传输量,也就是数据传输速度。8086的数据总线宽度是16,单次最大传递2个字节的数据。32位、64位Cpu指的就是数据吞吐量,64位为8字节。 控制总线:它的宽度决定了CPU对其他器件的控制能力,能有多少种控制。 CPU除了有控制器(控件其它器件)、运算

Rain and Tears 2392

ARM 37 个通用寄存器详解

一、简介 1、ARM 总共有 37 个寄存器,但是每种模式下最多只能看到 18 个寄存器,其他寄存器虽然名字相同,但是在当前模式不可见。 2、例如,对 r13 这个名字来说,在 ARM 中共有 6 个名叫 r13(又叫 sp)的寄存器,但是在每种特定处理器模式下,只有一个 r13 是当前可见的,其他的 r13 必须切换到它们的对应模式下才能看到。这种设计叫影子寄存器(banked register)。 3、这 37 个寄存器的地址都是不一样的,虽然它们可以有相同的名字。同时,有些寄存器甚至还有别名,比如在汇

weixin_42109053的博客 1万+

若依Vue整合积木报表实战:Token安全校验全流程解析

本文详细解析了在若依Vue后台系统中安全集成积木报表的全流程,重点阐述了Token安全校验的核心机制。通过前端菜单配置、Token传递、后端权限拦截及自定义Token服务实现,构建了一套完整的企业级报表访问安全防线,确保核心业务数据的安全可控。

t8u9v0的博客 578

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1312

解析ARM的几个关键寄存器

  图中缩写如下: R:Register;寄存器 PC:Program Counter;程序计数器 CPSR:Current Program Status Register;当前程序状态寄存器 SPSR:Saved Program Status Register;保存的程序状态寄存器 SP:Stack Pointer;数据栈指针 LR:Link Register;连接寄存器 SB:静态基址...

lwz15071387627的博客 1795

Android 音频源码分析——音量调节流程

源码分析基于android9.0 一、声音类型 对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体、铃声、闹钟、通话,但是其系统内部则分为十几种类型。 声⾳类型用来区分不同播放用途及播放设备,包含11中类型 定义在 frameworks/base/media/java/android/media/AudioSystem.java中 /** Used to identify the default audio stream volume */ public static final in

奋斗的菜鸟ing 3818

ARM 寄存器

ARM 关键几个寄存器 1. PC(程序计数器)  = windows 中 EIP 解析: 处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条 地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具 有某些手段来确定下一条取指指令的地址.程序计数器(PC)正是起到这种作用,所以通常又称之为‘指

testvul的博客 308

再见 n8n?Google Opal 实测:一句话生成 APP,这才是 AI 的正确打开方式!

Google Opal深度评测:这款自然语言生成工作流的AI工具,通过三个实战案例(科技早报生成器、冰箱食谱助手、爆款文案转译机)展示了其零代码开发的强大能力。它凭借Gemini 3.0 Pro和Google生态的无缝集成,将自动化门槛降至新低,预示着一个“意图驱动开发”的新时代。

莫潇羽的个人博客 848

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1612

程序是如何运行的——基于linux-ARM架构

  本文基于arm架构,通过一些简单的C语言demo,编译成汇编语言,通过对汇编语言进行解析,从而解释程序是如何在cpu核上运行的。   arm各个模式寄存器如下图:   本文不对arm寄存器进行详细的解释。具体可度娘关键词“arm寄存器”   linux内核工作在svc模式,应用程序工作在User模式。本文demo都为linux应用程序,所以都工作在User模式下。 基本概念介绍: 1,R0-...

深海 983

AI驱动的材料科学:从分子设计到性能预测

AI驱动的材料科学:从分子设计到性能预测 关键词: 材料科学 人工智能 分子设计 性能预测 机器学习 深度学习 摘要:

AI天才研究院 2187

ARM基础--指令集汇编常用指令

ARM的软中断指令是一种在执行程序时,通过指令触发软中断,在指定的软中断号(0-255)下执行一段子程序的指令。其中,MRS指令用于将CPSR或CSPR的值传送到一个通用寄存器中,MSR指令则将通用寄存器中的值传送到CPSR或CSPR中。ARM的状态寄存器传送指令是一种将状态寄存器的值从一个寄存器传送到另一个寄存器的指令,它可以用来保存和恢复状态寄存器的值,以便在程序执行过程中控制程序的行为。BGT指令用于比较两个寄存器的值,如果第一个寄存器的值大于第二个寄存器的值,则跳转到指定地址。

xinqi_1的博客 3219

反激电源及其变压器计算与绕制

本内容以一个宽电压输入 24V3A 输出的 72W 反激电源为例来计算电路的各个参数和器件选型,包含反激变压器的计算与绕制方法。

让你爱上电路设计 1936

这才是 Python 的正确玩法!用强化学习 (RL) 训练 AI 玩《王者荣耀》,胜率 90%!

大家打排位时,一定遇到过那种“意识神级、操作零失误”的对手,或者“走位呆滞、送人头”的队友。以前的“人机”是程序员写死的脚本(If 血量<20% Then 回城)。而现在的顶级 AI(如腾讯绝悟、OpenAI Five),是靠强化学习 (Reinforcement Learning)自己“左右互搏”练出来的。今天,我们不谈枯燥的数学公式,我将手把手教你用,搭建一个能玩 MOBA 游戏的 AI Agent。即使不能去 KPL 打职业,虐一下钻石局还是绰绰有余的!

BUG猿的博客 1182

ARM体系结构(下)(转)

   文章说明:calmarrow(lqm)读毛德操的《嵌入式系统》所做笔记文章引自:http://piaoxiang.cublog.cn ARM指令系统    系统的指令系统介绍这里就不罗列了,没有多大意义。这里只是总结一些小的知识点和经验,便于对ARM指令系统有更为深入的理解

timequark的专栏 1166

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Arm 嵌入式 开发 要点

1.很多新手学习都是从s3c2410, s3c2440 作为入门工具,该CPU从位置0x0开始运行,所以代码链接的时候,参数为         arm-linux-ld -Ttext 0x0 但是有的CPU不是这样的,比如LH7A404, 通过xmodem上传代码以后,从0xB0000000开始运行,所以链接应该为:         arm-linux-ld -Ttext 0xB000000

yudingding6197的专栏 755

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ARM 寄存器 详解

From(ARM 寄存器详解 ):https://blog.youkuaiyun.com/sandeldeng/article/details/52954781 ARM 寄存器 ARM工作状态 和工作模式 工作状态:arm 支持大小端(默认小端-低地址地位字节数据)、arm支持16bit thumb指令和32bit arm指令(默认arm指令) 工作模式:不同工作模式下 可访问的寄存器和指令集有差异,主要用于区分运行权限保护系统(由运行异常、中断或者软件主动触发切换模式) ...

freeking101的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ARM汇编基础之内核寄存器详解

一文教你搞清楚ARM cortex-m3内核的寄存器

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 1万+

ARM32、ARM64寄存器的比较

ARM32位寄存器ARM32寄存器表ARM64寄存器ARM64寄存器使用64位下NEON寄存器ARM64与ARM32的兼容ARM64与ARM32寄存器的映射AArch32上的系统寄存器AArch32上的PSTATEARM64的异常中断 ARM32位寄存器 ARM32寄存器表 ARM64寄存器 ARM64寄存器使用 ARMv8-A具有31个64位通用寄存器,在所有异常级别都可以访问 x0~x7...

qq_24601427的博客 7317

ARM寄存器组织

深入理解ARM寄存器组织是进行系统级编程的基石。随着Cortex-M系列在物联网领域的普及和Cortex-A系列在AI边缘计算中的应用,寄存器操作优化将成为提升系统性能的关键。结合ARM Architecture Reference Manual进行深入学习通过QEMU仿真环境进行寄存器操作实验分析Linux内核或FreeRTOS中的上下文切换实现关注ARMv9新特性中寄存器相关改进。

波风水门的博客 1867
上一篇: Linux trace使用入门
下一篇: Android NDK区分第一次起机-sqlite3 operation support
南丶烟
博客等级 码龄14年 569粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值