ARM 关键几个寄存器

发布者:码农创想家最新更新时间:2016-05-09 来源: eefocus关键字:ARM  寄存器 手机看文章 扫描二维码
随时随地手机看文章

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所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的 
正常执行。


3.R14称为子程序链接寄存器LR(Link Register)

当执行子程序调用指令(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  寄存器 引用地址:ARM 关键几个寄存器

上一篇:ARM开发板启动流程(从NandFlash启动)
下一篇:ARM LDR/STR, LDM/STM 指令

推荐阅读最新更新时间:2024-03-16 14:53

STM32寄存器映射
我们知道,存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么? 在存储器Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。 比如,我们找到GPIOB 端口的输出数据寄存器ODR 的地址
[单片机]
STM32<font color='red'>寄存器</font>映射
插上智慧翅膀,Actel SmartFusion发布
“一直以来,我都在强调,我们一直在专注开发自己的市场。尽管整个FPGA市场有两家强大的竞争对手,但Actel的策略使我们具备了额外的优势。”Actel(爱特)CEO John East日前对中国媒体表示。 John的一席话,的确是Actel的真实写照。一直以来,Actel凭借其独特的Flash工艺,占据着航天及军工市场,而混合信号Fusion及低功耗IGLOO系列也使得Actel完全不用束缚于网络通讯领域。 混合信号市场规模庞大 根据Gartner的市场预测,在2010年,FPGA规模约为36亿美元,而微处理器市场(120亿美元)与可变成模拟市场(61亿美元)规模远高于传统FPGA领域。因此,开发能满足于
[EEWORLD独家]
STM32M3_GPIO寄存器&GPIO工作方式
STM32M3_GPIO寄存器 STM32F103ZET6中 一共有7组IO口,每组IO口有16个IO,一共16X7=112个IO GPIOA,GPIOB---GPIOG 每组IO口含下面7个寄存器。也就是7个寄存器, 一共可以控制一组GPIO的16个IO口。 每组GPIO端口的寄存器包括: 两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH) , 两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR), 一个32位置位/ 复位寄存器(GPIOx_BSRR), 一个16位复位寄存器(GPIOx_BRR), 一个32位锁定寄存器(GPIOx_LCKR)。 每个I/O端口位可以自由编程,然而I/O端口寄
[单片机]
基于32位ARM和μC/OS-II的心电信号处理系统
据统计,我国目前有县及县级以上医院1.3万家,医疗机械总数达17.5万台,加上一些专业心脏疾病治疗机构,我国目前每年心脏疾病的门诊量约在一千万人次以上。根据国家卫生部《全国卫生信息化发展规划纲要》的目标,在2010年要基本实现医院的数字化和信息化。所以未来医疗器械市场对新型医疗设备的市场空间巨大,特别是拥有数字化和信息化特征的心电信号处理系统具有广阔的应用前景和实用价值。本文就是介绍的一种基于ARM的心电信号处理系统设计。 系统总体设计 本文所介绍的系统的主要功能是对心电信号进行实时的处理和传输,系统原理框图如图1所示。 心电信号通过电极提取进入模拟处理模块,在模拟处理部分经过放大和滤波处理后,提高了信号的强度和信噪比。信号
[单片机]
基于32位<font color='red'>ARM</font>和μC/OS-II的心电信号处理系统
巨头携手通用平台65纳米工艺,提供先进物理IP支持
ARM公司近日宣布与IBM、特许半导体(Chartered)及三星电子有限公司合作,为其通用平台之65纳米通用工艺提供ARM Advantage产品——Artisan系列物理IP产品的一部分。在同IBM和Chartered共同为90纳米工艺提供物理IP的基础上,这一协议扩展了ARM为通用平台提供的设计实现支持。针对65纳米低功耗工艺向IBM、特许半导体和三星提供的低功耗的ARM Metro产品已于去年发布。 IBM系统和技术集团半导体技术平台副总裁Steve Longoria表示:“很多客户不仅需要业界领先的生产能力,同时也需要低风险、灵活的方式来管理他们的资源战略,通用平台模式已经被证明对于他们是非常有吸引力的。通过这次引入的
[焦点新闻]
ARM linux的中断处理过程
一、前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述: 1、第二章描述了中断处理的准备过程 2、第三章描述了当发生中的时候,ARM硬件的行为 3、第四章描述了ARM的中断进入过程 4、第五章描述了ARM的中断退出过程 本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。 二、中断处理的准备过程 1、中断模式的stack准备 ARM处理器有多种process mode,例如user mode(用户空间的AP所处
[单片机]
<font color='red'>ARM</font> linux的中断处理过程
ARM/uClinux开发环境的建立
先说两句废话为和我以前一样对操作系统(尤其是嵌入式操作系统)迷惑的弟兄解释些概念。因为总是有人在问是不是一定要用操作系统,我的CPU能不能移植操作系统,可以移植什么操作系统,有了操作系统可不可以运行某些程序。 从我的个人经历来讲,这其实就是许多硬件出身的弟兄对操作系统这个东西有神秘感(和我一年前一样)。说白了,操作系统就是一段设计非常巧妙的程序,和你自己的程序从本质讲没有区别,于是,以上问题转为,我是不是一定要用这段程序,我的CPU能不能运行这段程序,可以跑什么样的程序。这个程序可以跑,调用这个程序接口的另一个程序能不能跑! 答案也就变得简单,操作系统对任何一个CPU都不是必须的(对嵌入式系统更是如此),你可以自己编些程序
[单片机]
ARM基础:linux运行态与ARM运行模式的对应
问: 从某一个方面来看,核心态与软中断有些类似。 系统通常情况下在用户态运行。只有发生了特定的操作后才切换到核心态。 始终都有一个Idle进程(用户态)在运行。这个Idle进程保证了系统通常运行在用户态。 用户态切换到核心态的过程可以拿软中断的过程作比喻(压栈,存上下文,按照不同的体系结构切换寄存器组,切换地址映射范围...)。 看《linux kernel development》看得一知半解。 上面自己的一些说法可能很不准确。表达大概的意思。不知这样理解对不对? 另外有一个问题: linux分用户态、核心态。两种状态;ARM处理器有7种运行模式。 这之间有什么联系吗?如果有,这两种状态和这7中运行模式是怎么对应
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved