ARM的寄存器及异常处理机制

arm的寄存器:
    普通:r0-r15
        r0-r12   //存储任何数据
        r13(sp)  //栈指针寄存器(私有寄存器),当模式切换、程序跳转时,可以存储通用寄存器数值到sp指向的内存地址
        r14(lr)//链接寄存器()  当程序跳转时,用来记录程序返回地址
        r15(pc)//程序计数器    读操作:arm状态读取得是当前正在执行的指令地址+8
                                 写操作:cpu会自动跳转到写入地址处执行代码
                                 
    特殊:cpsr(程序当前状态寄存器)
            N 31位   1表示结果为负  0表示结果为正
            Z 30位   1表示结果为0   0表示结果非0 
            C 29位   加法 1表示存在进位  0表示没有进位  减法:1表示没有借位 0表示有借位
            V 28位   溢出表示:1结果溢出  0没有溢出
            运算表示位只能cpu根据运算结果自己修改,程序员不能写
            E 9位    0小端   1大端
            I 7位    中断控制位       1不接收中断  0接收中断
            F 6位    快速中断控制位   1不接收快速中断  0接收快速中断
            M 4-0位  工作模式表示域
                      when '10000'  result = usr;  // User mode
                      when '10001'  result = fiq;  // FIQ mode
                      when '10010'  result = irq;  // IRQ mode
                      when '10011'  result = svc;  // Supervisor mode
                      when '10110'  result = mon;  // Monitor mode
                      when '10111'  result = abt;  // Abort mode
                      when '11010'  result = hyp;  // Hyp mode
                      when '11011'  result = und;  // Undefined mode
                      when '11111'  result = usr;  // System mode uses User mode registers
            
            修改模式的方法:
                1.在管理模式,程序员自主修改
                2.在异常发生时,cpu自动修改
          spsr(保存的程序状态寄存器)保存存cpsr数值
          
arm的异常处理机制:
    异常发生时,cpu会自动跳转到异常向量表固定位置执行代码
    异常向量表:arm的异常事件处理方法集合
    异常向量表基地址:0x00000000  0xffff0000   armv7可以设置在任意位置
    arm一共分7中异常
    0x0        reset异常
    0x4        Undefined Instruction(未定义)
    0x8        Supervisor Call(svc异常,软件中断)
    0xc        Prefetch Abort  (预取中止)
    0x10    Data Abort   (数据中止)
    0x14    not used
    0x18    irq 
    0x1c    fiq

当程序执行发生异常时,会自动跳转到异常向量表的固定位置处执行代码。

猜你喜欢

转载自blog.csdn.net/XU18829898203/article/details/84988458