基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记

时间:2023-01-27 18:38:49

ARM9处理器工作模式
基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记

改变工作模式的方法:①软件改变,改变CPSR(当前程序状态寄存器)的低5位即可;②外部中断或异常处理改变;

用户模式:大部分情况下,程序是运行在用户模式下,此时某些被保护的寄存器是不能访问;

非用户模式:除了用户模式之外的模式;也被称作特权模式。特权模式下,可以访问寄存器和一下片内资源。

异常模式:处理用户模式和系统模式外其余的5中模式,常用于处理中断或异常以及访问需要被保护的系统资源等情况;

系统模式仅存在于ARM体系结构版本V4以上,系统模式和用户模式拥有完全相同的寄存器;

ARM9的两种工作状态
处理器的两种操作状态:
1. ARM状态:32位,这种状态下执行的是字方式的ARM指令(地址[1:0]为0)。

  1. Thumb状态:16位,这种状态下执行半字方式的Thumb指令(地址[0]为0);

Thumb指令集的特点:
Thumb指令集是ARM指令集的功能子集,但是与ARM代码相比,可以节省30%~40%以上的储存空间,同时兼备32位代码的所有优点;

ARM内部寄存器组织
ARM存储系统:(1)复杂:寄存器,Cache,主存储器,辅助存储器;(2)简单:直接分为存储器和寄存器即可;

寄存器特点:
数量少,读写速度快;每个寄存器内都有一个名字,但是没有像存储器一样的存储地址;不同的存储器有不同的寄存器配置方案;
寄存器功能:暂存指令,数据和地址;

寄存器分组
分组的依据:处理器的工作状态和工作模式的不同。
分组的特点:相同名字的寄存器在不同组中是两个完全不同的物理寄存器;程序代码运行时的设计的工作寄存器组是由ARM9微处理器的工作模式确定的;
寄存器类别:通用寄存器,程序状态寄存器,程序计数器;
基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
(1) 通用寄存器
R0~R7:未分组寄存器;对于任何工作模式,这些寄存器都对应相同的32位寄存器地址;

R8~R14:为分组寄存器;对应的物理地址取决于当前处理器的工作模式;

R8~R12:有两个分组的物理寄存器;一组用于FIQ模式;一组用于非FIQ模式;

R0~R13:完全通用寄存器;保存数据和地址的通用寄存器;不会被*结构作为特殊用途,并且可用于任何使用通用寄存器的指令;

R13,R14:分别有6个分组的寄存器。一个用于用户模式和系统模式,另外5组寄存器分别对应5中工作模式;

异常处理:异常处理程序负责初始化自己的R13,使其指向该异常模式专用的栈地址。在异常处理程序入口处,将其他寄存器的内容保存到堆栈,返回时,重新将这些值加载到寄存器;从而保护现场的目的;

R13:堆栈指针SP;在ARM指令集集中,没有以特殊方式使用R13的指令或其他功能,只是习惯上都这样使用。但是Thumb指令集中存在使用R13的指令;

R14:链接寄存器LR;在结构上有两个功能:

① 在每种工作模式下,模式本身的R14用于保存子程序返回的地址。例如,当ARM9处理器执行带链接的分支指令(如BL)时,R14保存R15(PC)的值;

② 发生异常时,相应的寄存器分组R14_svc,R14_abt,R14_und,R14_ird和R14_fiq用来保存R15的返回值;

R15:程序计数器(PC)。在ARM状态下,R15[1:0]=0x00;PC的值为R15[31:2];

(2) 状态寄存器CPSR
R16:通用寄存器;看下表:
基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
1)条件代码标志位NZCV:

N:运算结果的最高位显示在该标志位上。对于有符号二进制补码,当结果为负数N=1,结果为正数或零为0;

Z:当指令结果为0时Z=1(通常表示比较结果“相等”)否则为0;

C:加法指令最高位进位C=1,否则C=0;减法指令最高位未借位C=1,借位则C=0;结合移位操作时C等于从最高位最后溢出的值;其他指令C不变;

V:加/减法运算并发生溢出时V=1,否则V=0;其他指令V不变;
(2)控制位IFTM4M3M2M1M0
当发生异常时这些位被硬件改变;当处理器处于特权模式时,可用软件操作这些位;

① 中断处理位:中断使用的前提是中断没有被禁止;
I=1时IRQ中断被禁止
F=1时FIQ中断被禁止

② 处理器标志位:T位反映了处理的的工作状态
T=1时,处理器处于Thumb状态下
T=0时,处理器处于ARM状态下;

③ 处理器模式位:决定处理器的工作模式,看下表格

基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
(3)保留位
CPSR中的保留位被保留为将来使用。为了提高程序的可移植性,当改变CPSR标志位和控制位,不要改变这些保留位。另外要确保程序的运行不受保留位的值的影响。因为将来处理器开能会将这些位设置为1或0;

ARM9的异常处理
什么是异常:当正常的程序被暂时停止时就是发生了异常;异常是由一个内部或外部产生一个引起处理器处理的额外事件;

什么是异常向量(exception vectors):
异常出现后,处理器强项从正常程序地址跳转到异常程序所对应的固定存储器地址开始执行程序,这些程序存储器地址称为异常向量;

ARM9体系支持其中异常处理
基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
1. 处理器一旦有复位信号输入,ARM处理器就立即执行当前。复位后,ARM处理器在禁止中断的管理模式下从地址0x00000000或0Xffff0000处开始执行;
2.
2. 未定义指令异常
当ARM处理器执行协处理器指令时,需等任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有回应,就会出现未定义指令异常。另外,试图执行未定义的指令也会出现未定义指令异常;

  1. 软件中断异常
    软件中断异常指令SWI使处理器进入管理模式,以请求特定的管理函数;

  2. 预取中止异常
    存储器系统发出存储器中止信号(Abort)时,响应取置激活的中止标记所取的指令无效,茹处理器试图执行无效指令,则产生预约中止异常;茹指令未执行,则不发生预约中止;

  3. 数据中止异常
    存储器发出存储器中止信号,响应数据中止标记的数据无效。

  4. IRQ(外部中断请求)异常
    通过处理器上的IRQ输入引脚,由外部产生IRQ异常。IRQ异常的优先级比FIQ异常的优先级低,当进入FIQ处理时,会屏蔽IRQ异常;

  5. FIQ(快速中断请求)异常
    通过FIQ上的输入引脚,由外部产生FIQ异常;
    异常优先级
    基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记