ARM 寄存器

转自http://blog.sina.com.cn/s/blog_62f386b50101car3.html

二、ARM处理器的模式与异常

ARM体系结构主要支持7种处理器模式,分别为 : 用户模式、快中断模式、中断模式、管理模式、中止模式,未定义模式和系统模式

ARM <wbr>core <wbr>介绍

(1)系统(sys),快中断(fiq)、中断(irq)、管理(svc)、中止(abt)、未定义(und)这六种模式成为特权模式

(2)快中断(fiq)、中断(irq)、管理(svc)、中止(abt)、未定义(und)

这五种成为异常模式

ARM <wbr>core <wbr>介绍

思考:为什么处理会被设计成这么多模式呢?

处理器之所以被设计出这么多模式的目的是为了能够更好地处理各种异常

那什么是异常呢?所谓的异常,指的就是中止了程序正常执行的过程而不得不去完成的一些特殊工作,如芯片复位,取指失败,指令未定义,等等。

ARM <wbr>core <wbr>介绍

有些同学在大学的时候,学过51单片机,知道中断的概念。在这里中断其实也是一种异常,这里的中断包括外部硬件产生的外部中断和由芯片内部硬件产生的内部中断。由中断产生的异常和其他异常,从处理方法的角度来看没有任何区别,所以我们可以把这些异常统一起来研究。

注意:在正常情况下,一个普通程序可能会运行在用户模式和系统模式下,当异常发生时,ARM就会自动切换到异常模式去处理异常,处理完后,又回到用户模式或系统模式下继续之前的工作。因为每一种模式都包含相应的私有资源,因此可以保证在处理异常的时候,原理的程序环境不会被新的环境破坏,从而保证了系统的正常工作。注意:在正常情况下,一个普通程序可能会运行在用户模式和系统模式下,当异常发生时,ARM就会自动切换到异常模式去处理异常,处理完后,又回到用户模式或系统模式下继续之前的工作。因为每一种模式都包含相应的私有资源,因此可以保证在处理异常的时候,原理的程序环境不会被新的环境破坏,从而保证了系统的正常工作。

好了,关于ARM的异常和工作模式就介绍在这里,接下来我们来看看ARM每种模式下所拥有的寄存器。

三、ARM每种模式拥有的寄存器

前面我们讲到,ARM使用的是RSIC架构,而RSIC架构特点之一就是使用大量寄存器。ARM处理器支持多模式,每种模式都有一些寄存器是公用的,有一些是私有的。

ARM <wbr>core <wbr>介绍

在这里可以简单总结一下:

(1)ARM总共有37个寄存器,其中R0-R7,CPSR,R15(pc)是任何模式下都公用的的寄存器

(2)用户模式和系统模式使用相同的寄存器R0-R15,CPSR

(3)每种异常模式都有自己的 SPSR,R13,R14

(4)FIQ模式除了公共R0-R7寄存器外,还有自己私有的R8-R12,其他模式没有自己私有的R8-R12寄存器

注意:Cortex体系结构下有40个32-Bits长的寄存器Cortex-A多出3个寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon

接下来我们一起来看看这些寄存器都有什么作用吧。

四、ARM中每个寄存器的用途

(1)R0-R12 这些寄存器我们可以随便使用,就像我们写C语言一样,都需要定义变量,在ARM的世界里,这些就是已经定义好的变量,可以直接拿来使用,每个都可以用来存放一个32bit的数哦。

(2)R13,R14这两个寄存器就要注意了,前面我们分析过,在所有的异常模式下都有自己的私有的R13,R14,即每种异常模式在操作R13和R14,不会对其他模式下R13和R14的值产生影响。

R13我们又叫做sp,也就是我们常说的栈指针。大家C语言的局部变量时需要入栈的,也就是说不管在那一种模式下,如果我们想调用C语言程序,那在之前先设置好对应模式的sp指针。

R14为链接寄存器(LR),在结构上有两个特殊功能:

(1)在每种模式下,模式自身的R14用于保存子程序返回地址

(2)当发生异常时,将R14对应的异常模式设置为异常返回地址(有些异常有一个小的固定偏移量)。

(3)寄存器R15为程序计数器(PC),它指向正在取指的地址。也就说R15保存的是那一条指令的地址,CPU就会预取那一条指令。

(4)寄存器CPSR为程序状态寄存器,它时刻记录CPU的状态

ARM <wbr>core <wbr>介绍

通过上图我们可以知道,CPSR记录了处理器当前工作的模式,FIQ、IRQ中断是否使能,指令带条件执行结果等信息。

下面我们详细来看看每一位分别代表什么意思:

A.条件代码标志

(N ) 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;

(Z ) 指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;

(C ) 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),并且最高位产生借位时 C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;

(V)进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。

B. 中断禁止位包括I和F位

当I位置位时,IRQ中断被禁止;

当F位置位时,FIQ中断被禁止。

C.T位反映了正在操作的状态

当T位置位时,处理器正在Thumb状态下运行;

当T位清零时,处理器正在ARM状态下运行。

D.模式位

模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。

10000 User mode ; 10001 FIQ mode; 10011 SVC mode ; 10111

Abort mode ; 11011 Undfined mode;

11111 System mode; 10110 Monitor mode; 10010 IRQ

注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误

(5)SPSR 程序状态保存寄存器

每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值