美文网首页嵌牛IT观察
ARM的7种运行模式和37个寄存器

ARM的7种运行模式和37个寄存器

作者: 2464d55f8c99 | 来源:发表于2018-12-09 08:31 被阅读0次

姓名 李林涛 学号 16020199032

转自:https://blog.csdn.net/weixin_42325069/article/details/84071975

【嵌牛导读】:作者简单介绍了ARM的7种运行模式和重要寄存器的功能和基本信息。

【嵌牛鼻子】:ARM、运行模式、寄存器

【嵌牛提问】:ARM的不同运行模式对ARM产生了怎样的影响?

【嵌牛正文】:

ARM的7种工作模式

包括用户模式和特权模式二大类,其中特权模式又分为系统模式和异常模式。CPU每次只能运行在一种工作模式下,各种模式之间的切换可以是程序员通过代码主动切换(通过程序状态寄存器CPSR)也可以是CPU自己在某种情况下自动切换。在每种模式下最多只能看到18个寄存器,其他的寄存器虽然名字相同但是在当前模式下都不可见。由于操作系统有安全级别的需要,因此CPU设计多种模式是为了满足操作系统的多种角色安全等级的需要。

用户模式(USR): 非特权模式,ARM处理器正常执行状态都在这种模式。

系统模式(SYS):运行具有特权操作系统任务。

快速中断模式(FIQ):Fast Interrupt Request,用于高速数据传输或通道处理。

外部中断模式(IRQ):当普通中断发生时会进入。

管理模式(SVC):操作系统使用的保护模式。

数据访问中止模式(ABT): 当数据或指令预取终止时进入,可用于虚拟存储和存储管理。

未定义指令终止模式(UND): 当CPU执行未定义指令时会进入。

32位的RAM共有37个寄存器

31个是通用型的,包括未分组寄存器( R0 - R7),分组寄存器(R8 - R14)和PC指针。

**不分组寄存器:**在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。

分组寄存器:

    对于R8—R12当使用FIQ(快速中断模式)时访问寄存器R8_fiq — R12_fiq,当使用除FIQ模式以外的其他模式时,访问寄存器

    R8 -R12

    对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用(图中的R13,R14),另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器分别为fiq,irq,svc,abt,und.

    2.1) R13在ARM指令中常用作栈指针SP

    特别注意:由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。

    2.2) R14称为子程序链接寄存器LR(Link Register)

    有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,另外就是异常处理后的返回地址,如中断。

    PC指针(R15)

    R15用作程序计数器(PC)对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。

6个是状态寄存器 1个CPSR和5个SPSR

CPSR为程序状态寄存器,从官方文档种可以提取到如下图,它的各个位都表明了CPU的某些状态信息。

下面介绍其中几个比较重要的位

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

Z:1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。

C:下面分四种情况讨论C的设置方法:

a) 加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。

b) 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。

c) 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

d) 对于其他的非加/减运算指令,C的值通常不改变。

V:下面分两种情况讨论V的设置方法

a) 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。

b) 对于其他的非加/减运算指令,C的值通常不改变。

I:1 表示禁止外部(硬件)中断(IRQ)

F:1 表示禁止快速中断(FIQ)

T:1表示为Thumb状态,0为ARM状态(Thumb态和ARM态是ARM的二种运行状态)

M[4:0]:用来设置处理器的工作模式具体数据见本文开始的介绍。

SPSR是 除USR和SYS模式外,对应用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,以保证程序的正常运行。

相关文章

  • ARM寄存器详解

    ARM A系列寄存器的情况 这是寄存器的总表,下面是CPU的各个模式,上面的纵轴就是寄存器组。 CPU在运行的时候...

  • ARM状态结构小记

    在系统学习ARM寄存器结构和功能之前,有必要先了解一下ARM的工作模式和工作状态。 一、 ARM的工作状态 两种状...

  • Android ARM逆向

    ARM 汇编的一些知识 寄存器数量不同模式下访问的寄存器寄存器用途条件执行后缀ARM 的指令流水线IDA 中的一些...

  • 4. ARM寄存器

    1. 简书-ARM寄存器讲解2. ARM寄存器解析3. ARM64汇编-寄存器和指令4. 堆栈基础-windows...

  • ARM的7种运行模式和37个寄存器

    姓名 李林涛 学号 16020199032 转自:https://blog.csdn.net/weixin_423...

  • iOS逆向001--初识汇编<三>指令和寄存器

    一:ARM寄存器 ARM指令主要是对寄存器,栈、内存的操作。寄存器位于CPU中,个数少速度快,ARM指令集中大部分...

  • ARM汇编

    一. ARM 寄存器 ARM共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.这些寄存器不能被同时...

  • 11.ARM的37个寄存器详解

    ARM寄存器 ARM共有37个寄存器,都是32位长度 37个寄存器中30个为“通用”型,1个固定用作PC,一个固定...

  • IOS arm64常用的汇编

    导论 生成汇编文件 寄存器 arm64 汇编条件域 arm64 汇编指令 总结 1. 生成汇编文件 2. 寄存器 ...

  • 汇编之常识(三)状态寄存器

    状态寄存器 CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理器,个数和结构都可能不同).这种寄存器在ARM...

网友评论

    本文标题:ARM的7种运行模式和37个寄存器

    本文链接:https://www.haomeiwen.com/subject/rlrhhqtx.html