ARM处理机模式--内部寄存器
扫描二维码
随时随地手机看文章
处理器模式
用户模式(user)简称usr
快速中断模式(FIQ)简称fiq
外部中断模式(IRQ)简称irq
特权模式(supervisor)简称sve
数据访问终止模式(abort)简称abt
未定义指令后终止模式(undefined)简称und
除了用户模式以外,其他的模式成为特权模式,这些模式下,程序可以访问所有系统资源,也可以任意进行处理机模式
处理其模式可以通过软件进行控制,可以同国外部中断或者是异常处理进行切换,大多数的用户程序运行在用户模式下,这时候应用程序不能访问一些受系统保护的系统资源
ARM处理器共有37个寄存器
其中包括: 31个通用寄存器和程序计数器(pc)这些寄存器都是32位寄存器
6个状态寄存器,这些寄存器都是32位寄存器,但是目前只是用了其中的12位
通用寄存器的分类
未备份的寄存器:R0~R7
备份寄存器P8~R14
程序计数器PC,即R15
未备份的寄存器:RO~R&,对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换,由于不同的处理其模式使用相同的物理地址,可能造成寄存器数据被破坏,未备份寄存器没有被系统用于别的特殊的用途,任何可采用通用寄存器的场合都可以用未备份寄存器
备份寄存器
对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理地址,例如在快速终端模式下,R8和R9分别记做R8_fiq,R9_fiq,当使用用户模式下的寄存器的时候,寄存器R8he寄存器R9分别记作R8_usr,R9_usr,这两种情况使用的物理地址是不同的,系统没有见这几个寄存器用于任何的特殊用途
对于备份的寄存器R13和R14来说,每个就处理器对应6个不同的物理地址,其中一个是用户模式和系统模式共用的,另外的5个是对应于其他5中处理机模式
寄存器R13在ARM模式下常用作堆栈指针,每一种异常模式都有自己的物理的值的R13,因此,初始化应用程序是应该初始化R13,使其指向异常模式专用的堆栈地址
寄存器R14又称为链接寄存器,在ARM体系结构中具有下面两种用途
1:每一种处理器模式自己的物理地址R14中存放当前子程序的返回地址,当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址
2:但异常中断发生时,该异常模式特定的物理R14被设置成异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移,具体的返回方式与上面的子程序返回基本相同
程序计数器PC R15
由于ARM采用了流水线机制,当正确读取了PC的值的时候,该值为当前指令地址值加8个字节(因为是32位的)因此一次处理的是32位(也就是4个字节)
当成功向R15写入一个地址数值的时候,程序将跳转到改地址进行执行
程序状态寄存器CPSR
CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问,它包含了条件标志位,中断净值为,当前处理器模式标志以及其他的一些控制位,每一种模式下都有个专用的物理状态的状态寄存器(称为SPSR)但特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,当异常中断退出时,可以用SPSR中保存的值来恢复CPSR
程序状态寄存器的格式如下:
N = 1表示结果为负数,N= 0表示结果为正数
z = 1表示结果为0,z = 0表示结果不为0
c表示有进位借位情况发生
v表示有溢出
I表示中断IRQ,F表示中断FIQ,T表示运行的状态,当T= 1表示运行在THUMB上,当T = 0 表示运行在ARM状态
后面的四位表示其中模式的选择