android arm 寄存器,ARM寄存器各自作用

注:本人系初学者,有错误请不吝指出。

1.ARM指令中有37个寄存器,有31个通用寄存器和6个状态寄存器。

------coretex-A多出3个寄存器,monitor模式 r13_mon,r14_mon,spsr_mon;

原因:系统模式和用户模式共享相同的寄存器。用户、系统模式没有“保存的程序状态寄存器(SPSR)”,而其他5种模式分别有一个对应的“保存的状态寄存器(SPSR)”,即共五个SPSR,七个模式共用一个“当时程序状态寄存器(CPSR)”,即共六个状态寄存器,还有31个通用寄存器。注意:任何模式都可以存取:

r0--r12,r13(栈指针寄存器sp),r14(链接寄存器lr),r15(程序计数器pc),CPSR

2.CPSR程序状态寄存器剖析:

这个寄存器的作用主要就是记录上一条指令执行的状态,根据结果来执行后面的事情;

1.高4位:NZCV

N 置1:结果是负数;

Z  置1:结果是0;

C  置1:结果完成或借位

V  置1:结果溢出

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:禁止 FIQ;

11.5位-T位:T = 0, J = 0:处理器处于ARM状态;

T = 1, J = 0:处理器处于ARM状态;

T = 1, J = 1:处理器处于ARM状态;

12.末5位-模式位:表示8中不同的模式,如10000 - USER模式  等等;

3.SPSR保存的状态寄存器详解:

作用:当异常产生时,内核执行的第一步:

拷贝CPSR到SPSR_;

----为了保存异常之前的状态,当异常结束时,要切回到这里;处理器应付不同的异常时要使用不同的工作模式,各种异常模式都有对应的SPSR寄存器;

---->(所以SPSR寄存器就是这个用);

4.lr链接寄存器详解:

作用:当异常产生时,内核执行的第三步:

保存返回地址到LR_;

---就是把pc指针(指向被预取的指令)保存到lr-->(所以链接寄存器就是这个用);

5.sp栈指针寄存器

作用:就是保存pc的值的,中断前一般要压栈保护pc指针,就是所谓的压栈保护;

6.r15----PC--程序计数寄存器

1.ARM状态时,指令要按字节32bits对齐,所以末两位未定义(为0);

因为4的二进制就是0100,只要指令末尾2位是0,这个指令肯定是4的倍数;

2.Thumb状态时,指令要按半字节16bits对齐,所以末尾位未定义(0);

3.Jazelle状态时,指令要按8bits对齐,要执行一个字节的话,要取4条指令;

7.说明:1)、用户模式外,其它6种模式称为特权模式。所谓特权模式,即具有如下权利:a.MRS(把状态寄存器的内容放到通用寄存器);b.MSR(把通用寄存器的内容放到状态寄存器中)。由于状态寄存器中的内容不能够改变,因此要先把内容复制到通用寄存器中,然后修改通用寄存器中的内容,再把通用寄存器中的内容复制给状态寄存器中即可完成“修改状态寄存器”的任务。

2)、剩下的六种模式中除去系统模式外,统称为异常模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值