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

    ARM寄存器

      ARM处理器共有3732位寄存器,其中31个通用寄存器6个状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决于ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的

      在所有的寄存器中,有些是各模式共用的同一个物理寄存器,有一些寄存器是各模式自己拥有的独立的物理寄存器,表1-1列出了ARM寄存器的组织

    表1-1 ARM寄存器组织

    通用寄存器

    通用寄存器可以分为3类:

    1. 未分组寄存器(The unbanked registers):R0~R7,在所有运行模式下,都分别是同一个物理寄存器;
    2. 分组寄存器(The banked registers):R8~R14
      • R8 ~ R12 每个寄存器对应2个不同的物理寄存器;当使用fiq模式时,访问寄存器R8_fiq ~ R12_fiq;其他模式,访问寄存器R8 ~ R12。

      • R13 ~ R14 每个寄存器对应6个不同的物理寄存器;其中一个是用户模式和系统模式共用,另外5个物理寄存器分别对应其它5种不同的运行模式。

      • 寄存器R13通常用做堆栈指针SP),这只是一种习惯用法,也可以是其它寄存器作为堆栈指针。

      • 寄存器R14用作子程序链接寄存器subroutine link register LR),指向函数的返回地址。

    3. 程序计数器PC:R15
      • 它虽然可以用作一般的通用寄存器使用,但是有一些指令在使用R15时有些特殊限制。当违反了这些限制时,该指令执行的结果将是不可预料的。

      • 由于ARM采用了流水线机制,对ARM指令集而言,PC总是指向当前指令的下两条指令的地址,其值等于当前正在执行的指令的地址+8(因为在取址和执行之间多了一个译码的阶段)。由于ARM指令时字对齐的,PC值的第0位和第1位总为0.

    程序状态寄存器

    CPSR(Current Program Status Register,当前程序状态寄存器):可以在任何运行模式下被访问,它包括条件标志位中断禁止位当前处理器模式标志和其他一些相关的控制和状态位。

    SPSR(Saved Program Status Register,备份程序状态寄存器):每一种运行模式下都有一个专用的物理状态寄存器。当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可以由SPSR来恢复CPSR

    图1-1 CPSR/SPSR的格式

    条件标志位

    N(Negative):本位设置成当前指令运算结果的bit[31]的值;

          当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示运算的结果为整数或零。

    Z(Zero):Z=1表示运算的结果为零;Z=0表示运算的结果不为零。

        对于CMP指令,Z=1表示进行比较的两个数大小相等。

    C(Carry)

    • 在加法指令中(包括比较指令CMN),当结果产生了进位,则C=1,表示无符号数运算发生了上溢出;其他情况下C=0;
    • 在减法指令中(包括比较指令CMP),当运算中发生了借位,则C=0,表示无符号数运算发生了下溢出;其他情况下C=0;
    • 对于包含移位操作的非加/减法运算指令,C中包含最后一次被溢出的位的数值;
    • 对于其他非加/减法运算指令,C位的值通常不受影响;

    V(oVerflow)

    • 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出;
    • 通常其他的指令不影响V位;

    以下指令会影响到CPSR中的条件标志位:

    • 比较指令,如CMP、CMN、TEQ、TST等;
    • 当一些算术运算指令和逻辑指令的目标寄存器不是R15时,这些指令会影响CPSR中的条件标志位;
    • MSR指令可以向CPSR/SPSR中写入新值;
    • MRC指令将R15作为目标寄存器时,可以把协处理器产生的条件标志位的值传送到ARM处理器;
    • 一些LDM指令的变种指令可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回;
    • 一些带“位设置”的算术和逻辑指令的变种指令,也可以将SPSR的值复制到CPSR中,这种操作主要用于从异常中断程序中返回;

    控制位

    CPSR的低8位I、F、T以及M[4:0]统称为控制位。当异常中断发生时这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

    • 中断控制位
      • 当I=1时禁止IRQ中断
      • 当F=1时禁止FIQ中断
    • T控制位
      • T控制位用于控制指令执行的状态,即说明本指令是ARM指令,还是Thumb指令。对于不同版本的ARM处理器,T控制位的含义不同。
    • M控制位
      • M[4:0]控制处理器的运行模式。

     

     

     

     

  • 相关阅读:
    sql行列互换
    转: 在hibernate中查询使用list,map定制返回类型
    拦截器和过滤器的区
    hibernate 实体对象的三种状态以及转换关系。
    如何理解Hibernate的延迟加载机制?在实际应用中,延迟加载与Session关闭的矛盾是如何处理的?
    Hibernate常见优化策略
    Hibernate的一级缓存、二级缓存和查询缓存。
    关于java Collections.sort 排序
    常用颜色,正则表达式工具
    java正则表达式
  • 原文地址:https://www.cnblogs.com/black-mamba/p/3509973.html
Copyright © 2011-2022 走看看