阳光沙滩
让学习编程变得简单
Android的ARM微处理的寄存器组织
发表于 2020-03-21    阅读次数 69

ARM

  1. ARM处理器是一种32位嵌入式RISC处理器。
  2. RISC的英文全称是Reduced Instruction Set Computer,中文是精简指令集计算机。特点是所有指令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。
  3. ARM微处理器的工作状态
  • ARM处理器的工作状态一般有两种,并可在两种状态之间切换

ARM状态:此时处理器执行32位的字对齐的ARM指令

Thumb状态:此时处理器执行16位,半字对齐的Thumb指令

  • 处理器工作状态的转变不影响处理器的工作模式和相应寄存器的内容。
  • ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。
  • 当操作数寄存器的状态位位1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ,FIQ,Unded等等),则异常返回时,自动切换到Thumb状态。
  • 当操作数寄存器的状态位为0时,执行BX指令可以使微处理器从Thumb状态切换到ARM状态。在处理器进行一场处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理切换到ARM状态。
  1. ARM体系结构的存储器格式
  • ARM作为32位的微处理器,从零字节到三字节防止一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。
  • ARM体系结构所支持的最大寻址空间为4GB
  • ARM体系结构可以用两种方式存储字数据:

大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。

小端格式:低地址存放的事字数据的低字节,高地址存放的是字节数据的高字节。

  1. 指令长度及数据类型
  • ARM微处理器的指令长度可以是32位(ARM状态下),也可以是16位(Thumb状态下)。
  • ARM微处理器中支持字节(8位),半字(16位),字(32位)这3种数据类型。
  • 字需要4字节对齐(地址的低两位为0),半字需要2字节对齐(地址的最低位为0)。
  1. ARM微处理器的7种运行模式
  • 用户模式(usr):ARM处理器正常的程序执行状态
  • 系统模式(sys):运行具有特权的操作系统任务
  • 快速中断模式(fiq):用于高速数据传输或通道处理
  • 外部中断模式(irq):用于通用的中断处理
  • 管理模式(svc):操作系统使用的保护模式
  • 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
  • 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常改变。

大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些保护的系统资源是不能被访问的。

除了用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式。

其中出去用户模式和系统模式以外的5种模式又称为异常模式,常用用于处理中断或异常,以及需要访问受保护的系统资源等情况。

  1. ARM状态下寄存器组织

在这里插入图片描述

  1. Thumb状态下的寄存器组织
  • Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0),程序计数器(PC),堆栈指针(SP),连接寄存器(LR)和CPSR。
  • 每一种特权模式下都有一组SP,LR和SPSR。
  • Thumb状态下的寄存器组织与ARM状态下的寄存器组织关系如下:

Thumb状态下和ARM状态下的R0~R7是相同的

Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的

Thumb状态下的SP对应ARM状态下的R13

Thumb状态下的LR对于ARM状态下的R14

Thumb状态下的程序计数器对于ARM状态下的R15

  • 在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但是可使用汇编语言程序手限制地访问这些寄存器,将其用作快速的暂存器。