寄存器总览

手册:ARM Architecture Reference Manual.pdf

章节:Programmers’ Model-->A2.3 Registers

ARM处理器总共有37个寄存器:

1、31个通用寄存器

2、6个程序状态寄存器

---------------------------------------

1、31个通用寄存器:

R0-R14共15个寄存器,加上PC指针共16个寄存器。

注意有后缀的寄存器,例如:R13_<mode>

R13_svc 表示SVC模式下面的R13寄存器。同理其他带后缀的寄存器。

再来把各种模式下的寄存器数一遍。通用寄存器共31个。

2、程序状态寄存器:

CPSR加上带后缀的共6个程序状态寄存器。

-------------------------------------------------------------

R0-R15被划分为三类:

1、不分组寄存器,R0-R7,不管在什么工作模式下面,用的是同一个寄存器。

2、分组寄存器,R8-R14,不同工作模式下面,用的可能是不同的寄存器。

3、PC指针,Register 15,R15,即程序计数器。

-----------------------------------------------------

在通用寄存器下面,有3个特殊的寄存器:

1、R13 用来充当SP堆栈指针。在程序中R13通常用来充当堆栈指针。

2、R14用来充当链接寄存器LR。有两个特殊的功能:

在每种工作模式下,保存函数的返回地址。

当程序发生异常时,比如中断发生时,去执行中断处理函数,中断处理函数执行完成,返回地址也是被保存在R14中。

3、R15程序计数器,PC指针。

------------------------------------------------------------

程序状态寄存器: 手册 A2.5Program status registers

ARM所有工作模式下都可以访问程序状态寄存器寄存器CPSR。
CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。

CPSR在每种"异常模式"下都有一个对应的
物理寄存器——程序状态保存寄存器
SPSR。当异常出现时,SPSR用于保存
CPSR的值,以便异常返回后恢复异常发生时的工作状态。

格式,意义:

比较重要的几个字段:

N Z I F M

N:比较两个数字大小时

a-b 如果a<b 结果为负数,则N=1

如果a>b,则N=0

Z: a-b ,如果a==b 则 Z=1,否则为0

I:如果为1,不能产生普通中断

F:如果为1,不能产生快速中断

M:0 1 2 3 4 ,共占了5位,表明处理器不能的工作模式,

想知道处理器现在的工作模式就访问CPSR寄存器,如果M位是10000,则表示为User模式

也可以设置M位,改为System模式,则把M设置为11111

时间: 2024-11-05 12:09:40

寄存器总览的相关文章

CPU的标志寄存器

高一时,学校组织去韶山游玩,我没去,这次趁着五一,总算去了我心心念念的韶山.其实我知道所有的景点都是差不多的,可是因为电视剧<恰同学少年>,让我对毛泽东有了进一层的了解,所以,我一直都想去看看. 有两个同学一男一女是我理想的旅友,可是女生不想去,而男士回家了.所以,我独自一人去了. 准备工作:一小包饼干,一小包山楂片,两个苹果,一瓶水,帽子(防晒),墨镜(装酷) 早晨5:30起床了,洗漱完毕,吃完早餐,赶到公交车站牌那里,才6点过几分.公交车6:31才到,等了近半个小时(公交车上明明说是6:0

ARM寄存器

ARM寄存器 一.ARM工作状态下的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式.但在任何时候,通用寄存器R14~R0.程序计数器PC(即R15).一个状态寄存器都是可访问的. 通用寄存器通用寄存器包括R0~R15,可以分为3类:(1)未分组寄存器R0~R7(2)分组寄存器R8~R14(3)程序计数器PC(R15) 1.未分组寄存器R0~R7在所有运

stl源码剖析 详细学习笔记 算法总览

//****************************基本算法***************************** /* stl算法总览,不在stl标准规格的sgi专属算法,都以 *加以标记 算法名称              算法用途         质变                   所在文件 accumulate          元素累计            否                   <stl_numeric.h> adjacent_differenc

kobox : dma_s3c.ko -v1 操作寄存器方式操作S3C2440的DMA

平台:TQ2440 linux版本:Linux EmbedSky 3.16.1-svn57 #56 Sat Oct 18 21:46:22 PDT 2014 armv4tl GNU/Linux 目标:v2中改成s3c2410_dma_xxx方式来操作DMA,看这里的寄存器映射是怎么使用系统接口来操作的! #include "dma.h" #define MEM_CPY_NO_DMA 0 #define MEM_CPY_DMA 1 //#define BUF_SIZE (512*1024

D3 API总览

学习外国的框架,零零星星和点点滴滴是不行的,还是要有一个高屋建瓴总揽全局的看法,所以就看看D3都有哪些方法. core:selection, transition, arrays, math, loading external resources, string formatting, csv formatting, localization(?), colors, Namesapce, Internal(?) scales:quantitative, ordinal svg:shapes, a

寄存器调试 (2):应用层通过C代码访问(待完善)

除了前面所述通过shell命令访问寄存器外, 还支持通过C代码访问. 驱动层通过注册miscdevice设备, 实现了对应用层open/write/read等标准api的支持. static DEVICE_ATTR(dump, 0644, misc_dump_show, misc_dump_store); static DEVICE_ATTR(compare, 0644, misc_compare_show, misc_compare_store); static DEVICE_ATTR(wri

x64 寄存器使用

http://blog.csdn.net/cosmoslife/article/details/8771773 http://blog.csdn.net/herx1/article/details/3134889 x64 结构提供了 16 个通用寄存器(以后称为整数寄存器),以及 16 个可供浮点使用的 XMM 寄存器.易失寄存器是由调用方假想的临时寄存器,并要在调用过程中销毁.非易失寄存器需要在整个函数调用过程中保留其值,并且一旦使用,则必须由被调用方保存. 下表说明了每种寄存器在整个函数调用

STM32 寄存器库和固件库

寄存器和固件库开发的差别和联系 固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道.向上提供用户函数调用的接口(API). 在 51 的开发中我们经常的作法是直接操作寄存器,比方要控制某些 IO 口的状态,我们直 接操作寄存器: P0=0x11; 而在 STM32 的开发中,我们相同能够操作寄存器: GPIOx->BRR = 0x0011; 这样的方法当然能够,可是这样的方法的劣势是你须要去掌握每一个寄存器的使用方法.你才干正确使用 STM32,而对于 STM32 这样的级别的

被遗忘的寄存器

CPU 里有一种名为寄存器的存储电路, 相当于机器语言中的变量. 具有代表性的寄存器有以下 8 个. 各个寄存器本来都是有名字的, 但现在知道这些名字的机会已经不多了, 所以在这里顺便介绍下. AX accumulator, 累加寄存器 CX counter, 计数寄存器 DX data, 数据寄存器 BX base, 基址寄存器 SP stack pointer, 栈指针寄存器 BP base pointer, 基址指针寄存器 SI source index, 源变址寄存器 DI destin