寄存器的物理地址的概述.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
寄存器的物理地址的概述

3.2.1 寄存器概述 ARM微处理器有37个32位长的寄存器,其中包括30个通用寄存器,6个状态寄存器和一个程序计数器寄存器(PC)。 如图3.2所示,ARM微处理器中将这37个寄存器分成不同的组,在ARM微处理器的每种工作模式下只能使用其中一组寄存器。我们知道,ARM微处理器共有7种模式,其中用户模式和系统模式拥有物理空间上完全相同的寄存器,而其它5种异常模式都有一些自己独立的寄存器。从图上可以看出,在用户和系统模式下可以使用R0-R15和CPSR共17个寄存器;在FIQ模式下可以使用R0-R15,CPSR,CPSR共18个寄存器,其中R8-R14以及SPSR寄存器是FIQ模式专有寄存器,其它寄存器和用户模式共用相同的物理寄存器;在IRQ、SVC、Undef、Abort模式下可以使用的寄存器都是18个(R0-R15,CPSR,SPSR),其中R13,R14,CPSR是各个模式专有的,其它和用户模式共用相同的物理寄存器。 可见,ARM内核中一共有37个物理上独立的寄存器,在每一种处理器模式中只能访问一组相应的寄存器。在每组寄存器中: R13通常用作栈指针寄存器(SP),每一种模式有自己的R13,所以允许每一种异常都有自己的栈指针。 R14用作连接或返回地址寄存器(LR),每一种模式有自己的 R14。 R15用作程序计数器(PC),用来保存读取指令的地址。 CPSR Current Program Status Register 存储ARM微处理器当前的状态和模式标志。 SPSR Saved Program Status Register 异常模式下的CPSR的备份寄存器,当一个异常发生时保存当前的CPSR值。结合连接寄存器可使处理器返回先前的状态。 ARM微处理器这样组织寄存器的好处在于当各种异常发生的时候,每种异常模式都可以保存一些重要的数据,使异常处理程序完成之后返回异常前的程序时不会破坏原有的寄存器或状态。 3.2.2 通用寄存器 通用寄存器包括:未分组寄存器(R0-R7)、分组寄存器(R8-R14)、程序计数器PC(R15)。 (1)未分组寄存器(R0-R7) 在ARM微处理器中寄存器R0-R7是未分组的,在图3.2中我们也看到,R0-R7在物理上只有一组,任何模式下使用R0-R7寄存器指的都是同一个R0-R7物理寄存器。未分组寄存器没有被系统用于特殊的用途,任何可使用通用寄存器的应用场合都可以使用未分组寄存器。在异常中断所引起的处理器模式切换时,要对未分组寄存器加以保护(入栈)以防止破坏寄存器中的数据。R0-R7在Thumb状态下也称为低组寄存器,R8-R15在Thumb状态下也称为高组寄存器。 (2)分组寄存器(R8-R14) R8-R14是分组寄存器,具体访问哪个物理寄存器取决于当前的处理器模式。R8-R12这组寄存器物理上有两组,FIQ模式下使用自己专有的R8-R12,而其他模式使用同一组R8-R12寄存器。这样的结构设计有利于加快FIQ的处理速度。在ARM体系结构中,R8-R12没有任何指定的其他的用途,所以当FIQ中断到达时,可以不保存这些通用寄存器,也就是说FIQ处理程序在保存和恢复现场时可以少保存和恢复几个寄存器(R8-R12),从而提高中断处理迅速。因此FIQ模式常被用来处理一些时间紧急的任务。 分组寄存器R13和R14,分别对应6个不同的物理寄存器。其中用户模式和系统模式共用一个,5中异常模式中分别有自己的R13和R14。也就是IRQ下的R13、R14与用户模式或其他4种异常模式下的R13、R14是不同的物理寄存器。 R13寄存器在ARM中常用作栈指针,称为SP。因为ARM状态下没有专门的入栈和出栈指令,所以这只是一种习惯用法。也就是,并没有任何ARM指令强制使用R13作为栈指针,用户可以使用其他寄存器作为栈指针。每一种异常模式都有自己的R13,在使用是要分别对其进行初始化,以保证在相应模式下能正确的进行入栈和出栈操作。另外需要注意,在Thumb指令集中,有一些指令强制使用R13作为栈指针,如栈操作指令。R13也可以作为通用寄存器使用。 R14寄存器又被称为连接寄存器(Link Register,LR),在ARM体系结构中R14的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,R14中保存的值等于异常发生时PC的值减4(或者减2),因此在各种异常模式下可以根据R14的值返回到异常发生前的相应位置继续执行。 当通过BL或BLX指令调用子程序时,硬件自动将子程序返回地址保存在R14寄存器中。在子程序返回时,把R14的值复制到程序计数器PC即可实现子程序返回。如,可以使用MOV? PC, LR或者BX? LR来完成子程序返回。 另外,也可以在在子程序入口处使用下面的指令将LR保存到栈

文档评论(0)

pt540099 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档