ARM寄存器
寄存器:是一种特殊的存储器,在CPU内部,可以用来存储数据,但是存储的内容有一定作用 。
对于Cortex A来说, 有40个寄存器,每个寄存器有32bit 。
注:对于寄存器而言,是没有内部地址的,使用编号来表示。
ARM寄存器图:
种类:
1、通用寄存器
R0-R7 :未分组寄存器
R13、R14 (FIQ:R8-R12 ):分组寄存器;
R15(PC):程序计数器(指令计数器/程序状态寄存器);
通用储寄存器作用:
R0-R12:存储各种数据;
特殊功能的寄存器:
R13(堆栈指针寄存器SP):存储栈的栈顶位置地址,与内存相关 ;
R14(链接寄存器LR):当程序跳转、函数调用时产生异常,调用该寄存器来存储异常,实现对断点和调用点的记录;
R15(程序计数器PC):存储当前执行的指令的下一条指令的地址。
2、状态寄存器
ARM寄存器:每种工作模式都会使用模式对应的寄存器保证程序执行。
Cortex-A:有40个,
其他:有37个
注:sys和user使用同一组寄存器 。
通用寄存器 :R0-R15
未分组寄存器:R0-R12 在所有模式下,未分组寄存器都是指向同一个物理寄存器,如果存在模式转换时,不同的模式都使用相同的寄存器,所以可能造成寄存器的数据破坏,应该工作模式切换时要保存。
分组寄存器:(FIQ)R8-R12、R13(SP)、R14(LR) 每次访问寄存器都与当前的工作模式相关,不同的模式都有不同的寄存器。
注:
ARM架构的八种工作模式:
用户模式(user):用户程序的工作模式,运行在操作系统的用户态,不能操作其他硬件资源,只能执行处理自己的数据,也不能切换到其他模式,要切换到其他模式,只能产生中断或其他异常;系统模式(system):系统模式是特权模式,不受用户模式的限制。使用同一套寄存器。操作系统通过该模式使用户访问受限的资源;
一般中断模式(IRQ):用于处理一般的中断请求。一般在硬件产生中断信号后会自动进入该模式,是一种特权模式,可以自由访问系统硬件资源;
快速中断模式(FIQ):用于处理时间要求比较紧急的中断请求。一般在高速数据传输及通道中;管理模式(spuer visor):一般CPU上电之后会自动进入该模式,该模式主要完成系统的初始化,软中断也会进入该模式。如果在用户模式下可以通过软中断进入该模式,请求访问硬件资源;
未定义模式(undefined):未定义指令中止。CPU在指令的译码阶段不能识别该指令操作时,则会进入该模式;
终止模式非法访问(abort):当用户非法访问内存,没有权限读写内存地址时,会进入该模式;
安全模式(monitor):为了安全而扩展出来的用于执行安全监控代码的模式。
注:模式之间可以进行切换,只要产生对应的异常就可以切换到对应的模式种
SP:堆栈指针寄存器 使用到内存,存储堆栈地址 。
LR:跳转链接寄存器 在程序跳转,函数调用,中断处理。
程序计数寄存器—R15(PC)
存储程序下一条要执行的指令地址,会自动由硬件修改,也可以由我们操作改变。
ARM指令:大小为4个字节,所以指令偏移大小为4,指令地址也是4的整数倍,所以程序计数器最低2位无效(低2位表示的地址是0-3)。
Thumb指令:大小为2个字节,所以程序计数器最低位无效。
程序状态寄存器—CPSR、SPSR
CPSR:程序状态寄存器,存储当前cpu执行程序时的工作状态 cpu在工作时只会有一个工作状态,所以所有的工作模式都是同一个CPSR 所有的运行工作模式都可以访问到CPSR;
SPSR:备份程序状态寄存器 当产生异常,切换对应的工作模式,SPSR用于保存当前的CPSR的值,然后改变CPSR(修改工作状态),异常结束时,回到之前的工作模式,就把SPSR的值恢复到CPSR。
上述是本人对于ARM寄存器部分见解,如有错误,还请批评指正。