| 网站首页 | 新闻 | SOPC | FPGA | DSP | ARM | 嵌入式操作系统 | 下载 | 所有产品 | 留言 | 论坛 | 购买指南 | 网络协议 | 驱动设计 | 
您现在的位置: 21嵌入式控制研究室 >> ARM >> ARM进阶 >> 文章正文 用户登录 新用户注册
[ARM学习系列(三)]ARM指令介绍(1)---寄存器和处理器模式     ★★★★★ 【字体:
[ARM学习系列(三)]ARM指令介绍(1)---寄存器和处理器模式
作者:21contro…    文章来源:21control    点击数:    更新时间:2005-12-4

ARM 处理器有37个寄存器,其中包括:

●31个通用寄存器,包括程序计数器(PC)在内。且为32位的。

●6个状态寄存器。这些寄存器都是32位。目前只使用了其中12位。

在任意的处理器模式下,可见的寄存器包括15个通用寄存器(R0-R14),1或2个状态寄存器,程序计数器(PC)。这些寄存器有的是各个模式共同拥有的,有的是各模式自己拥有的独立的物理寄存器。

●通用寄存器

  • 未备份寄存器:R0-R7。每个模式下指的都是同一个物理寄存器,在模式切换时,寄存器的数据可能会遭到破坏。(这也是为什么叫未备份寄存器的原因吧)
  • 备份寄存器:R8-R12。
  • 寄存器 13 典型的用做 OS 栈指针,但可被用做一个通用寄存器。这是一个操作系统问题,不是一个处理器问题,所以如果你不使用栈,只要你以后恢复它,你可以在你的代码中自由的占用(corrupt)它。每个处理器模式都有这个寄存器的影子寄存器。
  • 寄存器 14 专职持有返回点的地址以便于写子例程。当你执行带连接的分支的时候,把返回地址存储到 R14 中。同样在程序第一次运行的时候,把退出地址保存在 R14 中。R14 的所有实例必须被保存到其他寄存器中(不是实际上有效)或一个栈中。这个寄存器在各个处理器模式下都有影子寄存器。一旦已经保存了连接地址,这个寄存器就可以用做通用寄存器了。
  • 寄存器 15 是程序计数器。它除了持有指示程序当前使用的地址的二十六位数之外,还持有处理器的状态。

为更清晰一些... 提供下列图表:

模式  SVC 模式   IRQ 模式   FIQ 模式  APCS

R0 ------- R0 ------- R0 ------- R0        a1
R1 ------- R1 ------- R1 ------- R1        a2
R2 ------- R2 ------- R2 ------- R2        a3
R3 ------- R3 ------- R3 ------- R3        a4
R4 ------- R4 ------- R4 ------- R4        v1
R5 ------- R5 ------- R5 ------- R5        v2
R6 ------- R6 ------- R6 ------- R6        v3
R7 ------- R7 ------- R7 ------- R7        v4
R8 ------- R8 ------- R8         R8_fiq    v5
R9 ------- R9 ------- R9         R9_fiq    v6
R10 ------ R10 ------ R10        R10_fiq   sl
R11 ------ R11 ------ R11        R11_fiq   fp
R12 ------ R12 ------ R12        R12_fiq   ip
R13        R13_svc    R13_irq    R13_fiq   sp
R14        R14_svc    R14_irq    R14_fiq   lr
------------- R15 / PC -------------       pc
最右侧的列是 APCS 代码使用的名字,关于 APCS 的详情参见这里。 

程序计数器构造如下:

  位   31  30  29  28  27  26  25------------2  1  0

       N   Z   C   V   I   F    程 序 计 数 器  S1 S0
对 R15 的详细解释,请参见 psr.html

下面是你想知道的"模式",比如上面提及的"FIQ"模式。

  • 用户模式,运行应用程序的普通模式。限制你的内存访问并且你不能直接读取硬件设备。
  • 超级用户模式(SVC 模式),主要用于 SWI(软件中断)和 OS(操作系统)。这个模式有额外的特权,允许你进一步控制计算机。例如,你必须进入超级用户模式来读取一个插件(podule)。这不能在用户模式下完成。
  • 中断模式(IRQ 模式),用来处理发起中断的外设。这个模式也是有特权的。导致 IRQ 的设备有键盘、 VSync (在发生屏幕刷新的时候)、IOC 定时器、串行口、硬盘、软盘、等等...
  • 快速中断模式(FIQ 模式),用来处理发起快速中断的外设。这个模式是有特权的。导致 FIQ 的设备有处理数据的软盘,串行端口(比如在 82C71x 机器上的 A5000) 和 Econet。
IRQ 和 FIQ 之间的区别是对于 FIQ 你必须尽快处理你事情并离开这个模式。IRQ 可以被 FIQ 所中断但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以有更多的影子寄存器。FIQ 不能调用 SWI。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了并应该是 IRQ 而不是 FIQ。 Phew!
文章录入:fengfeiyi    责任编辑:fengfeiyi 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • ARM入门

  • 一个典型的嵌入式系统设计和…

  • 基于RTCORBA技术的嵌入式代理…

  • 基于ARM的海底大地电磁信号采…

  • 32位ARM嵌入式处理器的调试技…

  • ARM CPU S3C44B0X与C54X DSP…

  • 32位ARM嵌入式处理器的调试技…

  • ARM处理器及物理IP实现突破性…

  • 基于ARM的实时测控系统开发平…

  • 基于ARM核的AT75C220及其在指…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)