Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33058
  • 博文数量: 4
  • 博客积分: 86
  • 博客等级: 民兵
  • 技术积分: 76
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 20:44
文章分类

全部博文(4)

文章存档

2013年(1)

2012年(3)

分类: 服务器与存储

2012-10-14 22:59:38

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

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)、剩下的六种模式中除去系统模式外,统称为异常模式

阅读(2999) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~