历史上的今天

今天是:2024年09月18日(星期三)

正在发生

2021年09月18日 | ARM9_S3C2440学习(二)ARM状态下的寄存器组织

发布者:声慢慢 来源: eefocus关键字:ARM9  S3C2440  寄存器组织 手机看文章 扫描二维码
随时随地手机看文章

ARM状态下的寄存器组织见图2.3。ARM有37个32位长的寄存器,包括31个通用寄存器、1个当前程序状态寄存器CPSR(current program status register)、5个备份的程序状态寄存器SPSR(saved program status register)。这37个寄存器并不都是同时可见的。在任意时刻,只有16个通用寄存器(R0~R15)和一个或者两个状态寄存器(CPSR和SPSR)对处理器来讲是可见的。


1. 通用寄存器

31个通用寄存器用R0~R15表示,可以分为三类:
●未分组寄存器R0~R7。
●分组寄存器R8~R14。
●程序计数器PC(R15)。

(1)未分组寄存器R0~R7

  在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,它们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。

 

(2)分组寄存器R8~R14

  对于分组寄存器,它们每一次所访问的物理寄存器与处理器当前的运行模式有关。

  对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用FIQ模式时,访问寄存器R8_fiq~R12_fiq;当使用除FIQ模式以外的其他模式时,均访问寄存器R8_usr~R12_usr。


  对于R13、R14这两个寄存器来说,每个寄存器各有6个不同的物理寄存器,其中的一个是用户模式与系统模式共用的,另外5个物理寄存器分别用于5种异常模式。


  采用以下的记号来区分不同的物理寄存器:
R13_
R14_
其中,mode为以下几种模式之一:USR、FIQ、IRQ、SVC、ABT和UND。

  寄存器R13通常用作堆栈指针SP(stack pointer),但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。


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


  R14也称作子程序连接寄存器(subroutine link register)或连接寄存器LR,当执行分支指令BL时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。类似地,当发生中断或异常时,或当程序执行BL指令时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15(PC)的返回值。


  寄存器R14常用在如下的情况:在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将子程序的返回地址(在PC中)复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。典型的做法如下:

●执行以下任意一条指令:
MOV PC,LR ;R14复制到PC,实现子程序的返回
BX LR ;跳到LR指的地址处执行程序,实现子程序的返回
●在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}

图2.4是这种方法的一个实现。

(3)程序计数器PC(R15)

  寄存器R15用作程序计数器PC(program counter)。在ARM状态下,所有指令都是32位宽,所有的指令必须字对齐,所以PC的值由位[31:2]决定,位[1:0]是0(在Thumb状态下,必须半字对齐,位[0]为0,PC的值由位[31:1] 决定)。R15虽然也可用作通用寄存器,但一般不这么使用,因为R15的值通常是下一条要取出的指令的地址,因此使用时有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。


  由于ARM7采用了三级流水线技术,指令读出的PC值是指令地址值加8个字节。


2. 程序状态寄存器

  ARM的程序状态寄存器PSR(program status register)有1个当前程序状态寄存器CPSR和5个备份的程序状态寄存器SPSR。CPSR用来标识(或设置)当前运算的结果、中断使能设置、处理器状态、当前运行模式等。而SPSR则是当异常发生时,用来保存CPSR当前值,以便从异常退出时用SPSR来恢复CPSR。处理器在所有工作模式下都可访问CPSR,不同模式的CPSR是同一个物理寄存器。而每一种异常模式下都有一个SPSR,它们对应不同的物理寄存器。由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。CPSR、SPSR都是32位寄存器,它们的格式是相同的,如图2.5所示。

(1)条件标志位 N、Z、C、V

  N、Z、C、V(negative、zero、carry、overflow)位称为条件码标志(condition code flags),经常以标志引用,它们的内容可被算术或逻辑运算的结果改变,ARM指令可以根据这些条件标志,选择性地执行后续指令(条件执行),条件码标志各位的具体含义如表2.2所示。

(2)Q标志位

  在ARMv5及以上版本的E系列处理器中,CPSR中的Q标志位指示增强的DSP运算指令是否发生了溢出。SPSR中的标志位Q用于当异常出现时保留和恢复CPSR中的Q标志。在其他版本的处理器中,Q标志位未定义。


(3)控制位

  PSR的低8位I、F、T和M[4:0]统称为控制位,当发生异常时这些位发生变化,如果处理器运行于特权模式下,这些位也可以由软件修改。


I和F位是中断禁止位:I置1则禁止IRQ中断,F置1则禁止FIQ中断。

  T位反映了处理器的运行状态,对不同版本的ARM处理器,T位含义不同。

  对于ARM体系结构v3以及更低的版本和v4的非T系列版本处理器,T位应当为0。在这些版本中,没有ARM和Thumb状态之间的切换。

  对于ARM体系结构v4及以上版本的T系列处理器,T的含义为:T=0表示执行ARM指令,T=1表示执行Thumb指令。

  在这些结构体系中,可以自由地使用能在ARM和Thumb状态之间切换的指令。

  对于ARM体系结构v5及以上版本的非T系列处理器,T的含义为:T=0表示执行ARM 指令,T=1表示强制下一条执行的指令产生未定义指令异常。

  M[4:0](M0、M1、M2、M3、M4)是模式位,这些位决定处理器的工作模式,具体含义如表2.3所示。

M[4:0]其他的组合结果会导致处理器进入一个不可恢复的状态。


(4)其他位

  PSR中的其余位为保留位,保留位将用于ARM版本的扩展。应用软件不要操作这些位,以免与ARM将来版本的扩展冲突。

关键字:ARM9  S3C2440  寄存器组织 引用地址:ARM9_S3C2440学习(二)ARM状态下的寄存器组织

上一篇:ARM9_S3C2440学习(六)SDRAM内存分配
下一篇:ARM9_S3C2440学习(三)FCLK/HCLK和PCLK

推荐阅读

  在过去一年里,随着智能产品层出不穷,小家电市场容量激增。智能扫地机器人、自动刷碗机、破壁料理机等高端、智能的新兴小家电成为市场的宠儿。而其中破壁机销售额增速显著,被称为小家电市场的下一个风口,产品的品牌数量在近两年出现快速增长。  奥维云网数据显示,2016年我国料理机零售额同比增长高达89.9%,2017年第一季度,料理机零售额继续创...
日前,法国财政部长Agnes Runacher与意法半导体CEO Jean-MarcChéry共同造访新加坡,视察意法半导体在新加坡新设立的Fab,ST在9月17日在新加坡正式运营新的Fab,旨在增强其在汽车电气化和数字化领域的实力。据悉,位于新加坡的AMK fab13是ST在2017年从美光手中获得的,但是如果再往前看,前身是Numonyx工厂,也和ST有着相当的渊源。此前,意法半导体亚...
如果现在还把阿里巴巴视为一个纯粹的互联网公司,那应该是对它最大的误解。正如 20 年前不把他当做互联网公司一样。 阿里曾在 2016 年,提出了五新战略,其中包括“新零售、新制造、新金融、新技术和新能源”,随着时间的推移,我们看到阿里日拱一卒地在不断落地五新战略,而到了今天,已经初见端倪,可以看到了一个基本完整的布局。 在 9 月 16 ...
具体实现功能系统由STC89C51/52+DAC0832模块+指示及按键模块+LM358模块+LCD1602显示模块+电源模块构成。1、LCD1602显示波形种类和频率值(频率范围10-100HZ);2、可以通过按键设置波形种类和设定频率步进值;3、电位器可以改变振幅(0V-3.5V稳定);4、可产生正弦波、锯齿波、三角波、矩形波;5、四个指示灯可分别指示发出的波形。设计背景只要是能产生测...

史海拾趣

问答坊 | AI 解惑

download imge之后不能正常启动WM

Microsoft Windows CE Bootloader Common Library Version 1.4 Built Aug 25 2009 11:32:52 Microsoft Windows WM600 Bootloader HISI K3B831 USB1.1 NDIS Built Aug 25 2009 System ready! Preparing for download... INFO: *** Device Name&n ...…

查看全部问答∨

wince 6.0对java的支持如何?

wince 6.0对java的支持如何?有好的虚拟机推荐吗?…

查看全部问答∨

请问版主这个st的美女是谁?

怎么每份文档都有她啊? 下载 (35.86 KB) 2010-7-16 10:43 …

查看全部问答∨

请教版主,我用的dec33的评估板,想问个bootload的问题?

我用的dec33的评估板,我看了它的例子,bootloader.asm和主程序代码没有联系,生成了一个out文件,把这个文件烧进去后,bootloader.asm是怎么运行的啊,没看到对这个程序的调用什么的,是通过什么实现的啊?请高手指教!!万分感谢!!…

查看全部问答∨

J-Link用户手册_V2.3(共享)

刚才看到一个网友提的关于JLINK的问题,我想这个文档可能会对你有所帮助。 很高兴认识大家。 [ 本帖最后由 desk1983 于 2011-4-15 21:28 编辑 ]…

查看全部问答∨

FPGA核心板

本帖最后由 ddllxxrr 于 2016-1-7 17:07 编辑 想购买一个Altera EP2C8Q208 的核心板,不知道那个比较好,希望大家给推荐个淘宝网站。要便宜点的 本站强荐:185娱乐ゼ城.足球ゼ真_人.彩票齐全ゼ手机可投ゼ注任何游戏. 首次开户送10元.首存送58 ...…

查看全部问答∨

【TI建议】能不能增加对TI的E文PDF翻译!

TI的应用笔记比较丰富,不过基本都是E文版本的! 自己借助翻译工具,一个字一个字啃下来,很难理解里面真正的含义! 如果有中文的就方便很多了!…

查看全部问答∨

TI DSP28X 所有外设例程 (学者必看!)

长话短说:此乃开发DSP28X的必备例程!!!…

查看全部问答∨

迷茫啊,女孩子在电子信息工程方面怎么混呢

学习了四年的电子信息工程专业,毕业了,找的工作单位是做工程类的,平常基本没什么活,感觉学不到什么东西。现在公司业务向外地扩展,同意了老板调派我去外地的要求,以为是技术支持的角色,可是呢,公司刚成立,处理的都是繁琐的事情,而且公司一 ...…

查看全部问答∨

我的TFT触摸屏在调试触摸部分是有点问题

各位坛友好,我的TFT触摸屏在调试触摸部分是有点问题: 在触摸时如果连续多次触摸会产生白屏,但是程序应该没有问题吧,我已经看了多次了。 TFT的显示绝对没问题,已经写过几十次了,希望调试过触摸部分的坛友分享下自己的经验哈,坐等中~~~~ 小 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved