注:本人是初学者,如有错误请指正。
1.ARM指令有37个寄存器,31个通用寄存器和6个状态寄存器。
----- -酷睿tex-a是三个寄存器,monitor模式r13_mon、r14_mon、spsr_mon;
原因:系统模式和用户模式共享同一寄存器。 用户,系统模式没有“保存的程序状态寄存器(SPSR )”,但其他五种模式分别有相应的“保存的状态寄存器(SPSR )”。 共计5个SPSR,7个模式共享“当时的程序状态寄存器) (CPSR )”,共有6个状态寄存器和31个通用寄存器。 注意:您可以在任何模式下访问。
r0--r12、r13 (堆栈指针寄存器sp )、r14 (链接寄存器lr )、r15 (程序计数器pc )、CPSR
2.CPSR程序状态寄存器分析:
该寄存器的作用主要是记录前一条指令执行的状态,并根据结果执行后一条;
1 .高4位: NZCV
n1 )结果为负数;
z集1 :结果为0;
C集1 :结果完成或借用
v1 )结果溢出
2.27位--Q位:仅支持ARM v5TE-J,表示饱和状态
3.25-26位:空
4.24位-J位:仅支持ARM v5TE-J,
T=0; 如果J=1,则处理器处于Jazelle状态;
5.20-23位: DNM位,do not modify,不能动就对了;
6.16-19位: GE【3:0】位,以上(执行SIMD指令时有效);
7.10-15位: IT【7:2】、if . then .命令执行状态位;
8.9位-E位,大小侧控制位;
9.8位-A位,A=1:禁止不正确的数据异常;
10.6-7位,I=1:禁止IRQ; f=1:禁止智商;
11.5位-T位: T=0,J=0:处理器处于ARM状态;
T=1,J=0:处理器处于ARM状态;
T=1,J=1:处理器处于ARM状态;
12 .最后五位-模式位:表示8种不同的模式,例如10000 - USER模式;
3.SPSR保存的状态寄存器详细信息:
角色:如果出现异常,内核将执行的第一步:
将CPSR转换为SPSR_;
---为了保存异常以前的状态,异常结束时,回到这里; 处理器在应对不同异常时使用不同的工作模式,每个异常模式都有对应的SPSR寄存器;
--- () )所以SPSR寄存器用于此);
4.lr链接寄存器详情:
角色:如果出现异常,内核将执行步骤3 :
返回地址为LR_;
---PC是将PC指针(指向预取命令的指针)保存到lr () ),因此链接寄存器就是此用途)。
5.sp堆栈指针寄存器
作用:存储pc的值,一般在中断前堆栈保护pc指针,即所谓的堆栈保护
6.r15----PC--程序计数寄存器
1 .对于arm状态,最后两位未定义(0),因为命令以字节32位对齐;
4的二进制值为0100,因此如果指令的最后两位数为0,则此指令必须是4的倍数
2 .对于2.Thumb状态,未定义末尾比特(0),因为命令以半字节16bits对齐;
3.Jazelle状态时,命令以8bits对齐,运行1字节需要4个命令;
7 .说明:1)、用户模式以外的6种模式称为特权模式。 特权模式是指a.MRS (将状态寄存器的内容放入通用寄存器); b.MSR (将通用寄存器的内容放入状态寄存器)。 由于无法变更状态寄存器的内容,因此将内容复制到通用寄存器后,修改通用寄存器的内容,将通用寄存器的内容复制到状态寄存器中,即可完成“状态寄存器的修改”。
2 )剩下的6种模式中,除系统模式外,统称为异常模式。