一、什么是寄存器
1、寄存器是CPU外设的硬件组成部分,可以像访问内存一样访问寄存器(统一编址),用来编程控制外设,CPU设计者定义的,实际是某个外设编程控制的API。
2、一般来讲,为了访问的最大效率,CPU的数据总线的位宽与寄存器位宽相同,并且通常进行的是位操作。
二、寄存器的分类
1、通用寄存器:ARM中有37个,汇编中R0,R1,R2等,是CPU的组成部分,用来CPU运算时暂存数据和结果。
2、特殊功能寄存器(SFR):在外设中,通过编程控制寄存器中的数据来控制这个外设,这就是硬件编程的方法。
三、通用寄存器的概括
1、通用寄存器 ——CPU——名字访问(无地址):通用寄存器共有37个,其中7个为特殊 的寄存器:1个PC寄存器,1个CPSR寄存器,5个异常模式下的SPSR寄存器。
1)PC寄存器:PC(Program control register)为程序指针,PC指向哪里,CPU就会执行哪条指令(所以程序跳转时就是把目标地址代码放到PC中)。
2)CPSR程序状态寄存器:是保存用户模式下的当时的程序状态,以便当执行完中断或其他时,可以跳转回来继续执行原来的程序。
2、通用寄存器的特点
CPU根据不同的模式,可访问的寄存器不同。37个通用寄存器中,有多个在不同的模式中重复了,但在不同的模式下,职能访问一个,其他重复寄存器不可见,称为影子寄存器(Banked Register)
四、异常处理流程
1、ARM的7种工作模式:
1)CPU设计工作模式的原因:操作系统有安全级别要求,因此CPU设计多种模式是为了方 便操作系统的多种角色安全等级需要。
2)定义及分类
Normal:(普通模式):
User : 非特权模式,大部分任务执行在这种模式
Privilege(特权模式)
FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式
Supervisor :当复位或软中断指令执行时将会进入这种模式
Abort : 当存取异常时将会进入这种模式
Undef : 当执行未定义指令时会进入这种模式
System : 使用和User模式相同寄存器集的特权模式
3)不同模式的切换可以通过编程实现或者CPU在特定的情况下自行切换,不同模式下权限和可访问的寄存器不同。
2、异常:正常工作之外的流程都是异常。如:让正常播放视频的播放器快进,就是中断。
1)FIQ、IRQ、SVS本质上就是中断,中断是异常的一种,但属于正常且可控的异常。
Abort、Undef属于真正的异常,导致CPU无法正常的工作。
2)中断类似于异步:属于响应式的工作方式,而非根据同步时钟工作的同步工作方式,异 步就是通过中断来实现。
3、异常向量表的含义及作用
1)异常向量表:是CPU硬件已经设定好的,专门用来处理异常,类似于向量组成的表格
2)当异常出现时,CPU会自动动作,即PC寄存器会自动跳转到相应的异常向量,这是CPU自动执行的,无需写代码控制;代码需要做的就是告诉CPU具体如何来处理这些异常。
4、ARM的异常处理机制
CPU在发现异常后,具体是如何来跳转到异常向量表并处理异常的流程?
1)保护现场
1>>CPSR(程序状态寄存器)复制到SPSR;
2>>修改CPSR:1>Thumb/ARM指令集——>ARM指令集(Thumb状态下无法处理异常);2>用户/系统模式——>相应的异常模式;3>中断禁止(如果需要的话)
3>>保存LR寄存器
2)前往处理异常
PC寄存器——>指向异常向量
3)恢复现场
1>>SPSR——>CPSR
2>>LR——>PC
主要哪些事是CPU做的,哪些事是需要写代码做的。