寄存器的组成

来源:互联网 发布:网店美工工资多少 编辑:程序博客网 时间:2024/05/20 12:24

1.ARM处理器有37个寄存器。

 

  通用寄存器:31个  :R0~R15   R13_svc,  R14_svc R13_abt,R14_abtR13_irq,R14_irqR13_und,R14_undR13_fiq,R14_fiqR8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq     

 

  状态寄存器:6个 :cpsr,spsr_svc,spsr_abt,spsr_und,spsr_irq,spsr_fiq.

 

 

2.ARM 状态下的通用寄存器

 通用寄存器(R0~R15)可分为3类:

 **不分组寄存器:R0~R7;

 **分组寄存器    :R8 ~ R14

 ** 程序计数器  : pc

 

应用:

   不分组寄存器:在所有处理器模式下,他们访问的都是同一个物理寄存器。所以必须注意对同一个寄存器在不同模式下使用时的数据保护。

   分组寄存器    :

         R8 ~ R12:     FIQ模式分组寄存器     R8 ~ R12   ,FIQ处理程序可不必保存和恢复中断现场,从而使FIQ中断的处理模式过程更加迅速

                                    非FIQ模式分组寄存器 R8 ~ R12,在FIQ以外的4个异常模式使用 R8~ R12和各自的R13,R14,来简单的处理中断。在FIQ模式以外的中断处理中,

                                    如果要使用R8 ~ R12,则必须考虑保护。

 

       R13 ~ R14:     寄存器R13和R14各有六个分组的物理寄存器,1个用于用户模式,其他的5个用于异常模式。

                                    名字命名规则如下:R13_<mode>              R14_<mode>

 

                   R13:    通常用作堆栈指针SP,在ARM中这是一种习惯的用法,也可当做普通的寄存器来使用。但是在Thumb中必须当做Sp堆栈指针来使用。

                                   每一种异常模式都有自己的R13寄存器。当推出异常处理程序时,将保存在R13所指的堆栈中的寄存器值弹出,这样就使异常处理程序不会破坏被其中断的

                                   程序的运行现场。

                   R14:    用作子程序链接寄存器(link register),也称为LR。每一种异常模式都有自己的物理R14,用来存放当前子程序的返回地址。即当前的pc值保存在R14寄

                                  存器中。当执行完中断处理程序,只要把R14的值复制到pc中,中断程序立即返回。

                                  MOV PC,LR

                                  BX  LR

 

                                 在子程序入口使用下面的指令将pc 保存到栈中:STMFD  SP!,{<register>,LR}

                                 下面的指令可实现子程序的返回: LDMFD  SP! {<register>,pc}

 

    程序计数器pc: 当向R15写入一个地址时程序就会跳转到该地址去执行,所以使用该寄存器一定要谨慎。由于ARM状态下指令总是字对齐的所以R15的低两位为0。

                                 [31 - 2]保存地址。

 

3.ARM程序壮态寄存器

CPSR:当前程序壮态寄存器

SPSR:程序壮态保存寄存器      用于保存CPSR的壮态,以便从异常返回后恢复异常发生前的工作状态。

 

CPSR和SPSR的格式:

 

                 

 

条件码标志:

    N:在结果是有符号的二进制补码情况下,如果结果为负数,则 N= 1,否则 N = 0;

    Z:如果结果是为0,则 Z = 1,否则 Z = 0。

    C:对于加法来说,如果产生进位则 C = 1,否则 C = 0;

          对于减法来说,如果有借位 则C = 0,否则 C = 1;

          对于移位操作 C 为移位操作中最后移出位的值;

   V:对于加法来说,操作数和结果都是有符号数时,如果发生溢出,则 V = 1,否则 V= 0;

 

控制位:

   最低8位为控制位。当异常发生时,改变控制位。

   I:中断禁止位;若 I = 1,则禁止IRQ中断;

  F:快速中断禁止位;若 F = 1,则禁止FIQ中断;

  T:状态位; T = 0  ARM壮态  ,T = 1  Thumb壮态

  M:模式位;这些位决定处理器的工作模式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击