ARM之寄存器、工作模式以及异常处理

一、寄存器

    ARM共有37个寄存器,都是32位长度的。

    ARM中共有37个寄存器,其中30个为“通用型寄存器”,一个固定做PC,一个固定做CPSR

    5个固定做5种异常模式SPSR。

    不分组寄存器(R0-R7)

    分组寄存器(R8-R14)

    程序计数器R15(PC)

    不分组寄存器:

        R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器

        没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。

    分组寄存器:

        FIQ模式分组寄存器R8-R12

        FIQ模式以外的分组寄存器R8-R12

    分组寄存器:

        寄存器R13通常做堆栈指针SP

        寄存器R14用作子程序链接寄存器也成为LR,指向函数的返回地址

    程序计数器:

        寄存器R15被用作程序计数器,也称PC。其值等于当前正在执行的指令的地址+8(因为在取址和执行间多

        一个译码的阶段)。

    状态寄存器:

        CPSR:ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前

        处理器模式以及其他状态和控制信息。

        CPSR在每个异常模式下都有一个对应的物理寄存器-程序状态保存寄存器SPSR。当异常出现时,SPSR用

        于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。

二、模式极其对应的寄存器

    

    USER模式:正常用户模式,程序正常执行模式

    FIQ模式:处理快速中断,支持高速数据传送或通道处理

    IRQ模式:处理普通中断

    SVC模式:操作系统保护模式,处理软件中断swi Reset

    ABT(终止)模式:处理存储器故障,实现虚拟存储器和存储器保护

    UND(未定义)模式:处理未定义的指令陷阱,支持硬件协处理器的软件仿真

    SYS(系统基本上和USER模式相等)模式:运行特权操作系统任务(使用和USER模式下相同的寄存器的

    特权模式)

除用户模式其他的6中模式成为特权模式,在特权模式下,程序可以访问所有的系统资源,也可以

任意地进行处理器模式间的切换。

特权模式中除了系统模式其他的5种模式被称为异常模式。

三、异常处理

    当一种异常发生时,硬件会自动做如下的事:

    1、保存执行状态:将CPSR保存到相应异常模式下的SPSR中

    2、模式切换:将CPSR模式位强制设置为与异常类型相对应的值,同时处理器进入到ARM执行模式,禁止

        所有的IRQ中断,当进入FIQ模式时,禁止FIQ中断。

    3、保存返回地址:将下一条指令的地址(被打断的程序)保存在LR(该异常模式下的R14)中

    4、跳入异常向量表:强制设置PC的值为相应异常向量地址,跳转到异常处理程序中

    异常处理完成后,返回被打断程序继续执行(这些是我们手动需要完成的):

    1、恢复被打断程序运行时寄存器数据

    2、恢复程序运行状态CPSR

    3、通过进入异常时保存的返回地址,返回到被打断程序继续执行

上述操作通常可以通过一条指令实现上述全部操作:

LDMFD SP_excp!, {r0-r12, pc}^

注:SP_excep为对应异常模式下SP,^符号表示恢复SPSR_excep到CPSR

欢迎各位指出不足之处



    





    


猜你喜欢

转载自blog.csdn.net/qq_41003024/article/details/80296697