zoukankan      html  css  js  c++  java
  • ARM寄存器介绍

    ARM处理器包含多少寄存器?每种模式下又有那些寄存器?这些寄存器的作用又是什么?带着这些问题我们来学习ARM寄存器吧!相信看完这篇文章后你会有所收获。
    ARM处理器共有37个寄存器。
    它包含31个通用寄存器和6个状态寄存器。

    =======================================================================================
    Usr         System         Supervisor      Abort         Undefined         IRQ           FIQ
    ----------------------------------------------------------------------------------------------------------------
    R0          R0             R0              R0            R0                R0            R0
    R1          R1             R1              R1            R1                R1            R1
    R2          R2             R2              R2            R2                R2            R2        
    R3          R3             R3              R3            R3                R3            R3
    R4          R4             R4              R4            R4                R4            R4
    R5          R5             R5              R5            R5                R5            R5
    R6          R6             R6              R6            R6                R6            R6
    R7          R7             R7              R7            R7                R7            R7
    R8          R8             R8              R8            R8                R8            R8_fiq
    R9          R9             R9              R9            R9                R9            R9_fiq
    R10        R10          R10            R10         R10              R10          R10_fiq
    R11        R11          R11            R11         R11              R11          R11_fiq
    R12        R12          R12            R12         R12              R12          R12_fiq
    R13        R13          R13_svc   R13_abt  R13_und    R13_irq   R13_fiq
    R14        R14          R14_svc   R14_abt  R14_und    R14_irq   R14_fiq
    PC          PC            PC             PC            PC                PC            PC
    CPSR    CPSR        CPSR        CPSR      CPSR           CPSR      CPSR
                               SPSR_svc        SPSR_abt      SPSR_und          SPSR_irq      SPSR_fiq
    =======================================================================================
    1.通用寄存器的分类:
    a.未备份寄存器,包括R0-R7
        对每个未备份寄存器来说,在所有的模式下都是指同一个物理寄存器(例如:Usr下的R0与FIQ下的R0是同一个寄存器)。在异常程序中断造成模式切换时,由于不同模式使用的是相同的物理寄存器。这可能导致数据遭到破坏。未备份寄存器没有被系统作为别的用途,任何场合均可采用未备份寄存器。
    b.备份寄存器,包括R8-R14
        对于备份寄存器R8-R12来说,除FIQ模式下其它模式均使用相同的物理寄存器。在FIQ模式下R8_fiq,R9_fiq,
    R10_fiq,R11_fiq,R12_fiq。它有自己的物理寄存器。
        对于R13和R14寄存器每种模式都有自己的物理寄存器(System与Usr的寄存器相同)当异常中断发生时,系统使用相应模式下的物理寄存器,从而可以避免数据遭到破坏。
       R13也称为SP堆栈指针。
       R14也称为LR寄存器
    c.程序计数器,PC
       PC寄存器存储指令地址,由于ARM采用流水机制执行指令,故PC寄存器总是存储下一条指令的地址。
       由于ARM是按照字对齐故PC被读取后的值的bit[1:0]总是0b00(thumb的bit[0]是0b0)。

    2.程序状态寄存器
    程序状态寄存器包含当前程序状态寄存器和备份状态寄存器。
    a.CPSR(程序状态寄存器)
    CPSR在任何处理器模式下都可以被访问。其结构如下:

      31 30 29 28  ---   7   6   -   4   3   2   1   0
      N  Z  C  V         I   F       M4  M3  M2  M1  M0

    N(Negative)、Z(Zero)、C(Carry)以及V(oVerflow)称为条件标志位。ARM指令根据CPSR的条件标志位来选择地执行。

    CPSR条件标志位
    =======================================================================================
    条件标志位                   含义
    ----------------------------------------------------------------------------------------------------------------
    N                            N=1 表示运算结果为负数,N=0 表示运算结果为正数。              
    Z                            Z=1 表示运算结果为0, Z=0 表示运算结果为非零。
    C                            C=1 表示运算结果产生了进位。
    V                            V=1 运算结果的符号位发生了溢出。
    Q                            在ARMv5 E系列版本中Q=1 表示DSP指令溢出。
                                 在ARMv5以前的版本中没有Q标志位。
    =======================================================================================
    以下指令会影响CPSR的条件标志位
    (1)比较指令,如: CMP、CMN、TEQ、TST等。
    (2)当一些算术逻辑运算的目标寄存器不是PC时,这些指令会影响CPSR的条件标志位。
    (3)MSR与MRS指令可以对CPSR/SPSR进行操作。
    (4)LDM指令可以将SPSR复制到CPSR中。

    CPSR的控制位
    =======================================================================================
    控制位                        含义
    ----------------------------------------------------------------------------------------------------------------
    I                             I=1 禁用IRO中断
    F                             F=1 禁用FIQ中断
    T                             ARMv4以上T版本T=0 执行ARM指令,T=1执行Thumb指令。
                                  ARMv5以上非T版本T=0 执行ARM指令,T=1表示下一条指令产生未定义指令中断。M[4:0]                        控制处理器模式
                                  0b10000      User
                                  0b10001      FIQ
                                  0b10010      IRQ
                                  0b10011      Supervisor
                                  0b10111      Abort
                                  0b11011      Undefined
                                  0b11111      System     
    =======================================================================================
    b.SPSR(备份状态寄存器)
    SPSR的结构与CPSR的结构相同,SPSR是用来备份CPSR的。
    现在你对ARM处理器的寄存器有一些了解了吧?

  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/2373059.html
Copyright © 2011-2022 走看看