资源描述:
《ARM体系结构与编程——学记笔记.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第一章ARM概述及其基本编程模型1.4ARM处理器模式处理器模式描述用户模式(User,uer)正常程序执行的模式异常模式快速中断模式(FIQ,fiq)用于高速数据传输和通道处理特权模式,可访问所以系统资源,及处理器模式切换外部中断模式(IRQ,irq)用于通常的中断处理特权模式(Supervisor,sve)供操作系统使用的一种保护模式数据访问中止止模式(Abort,abt)用于虚拟存储以存储保护未定义指令中止模式(Undefind,und)用于支持通过软件仿真硬件的协处理器系统模式(System,sys)
2、用于运行特级的操作系统任务1.5ARM寄存器介绍1.5.1通用寄存器未备份寄存器(Theunbankedregisters)R0~R7。在所有的处理器模式下使用同一个物理寄存器。备份寄存器(Thebankedregisters)R8~R14。R8~R12每个寄存器有两个不同的物理寄存器。R13~R14每个寄存器对应6个不同的物理寄存器。用户模式和系统模式共用一个。区分各个物理寄存器:R13_通常作为栈指针Mode:usr,svc,abt,und,irq及fiq。R14连接寄存器。1.存放当前子程序
3、的返回地址。2.异常中断发生时,设置成该异常模式将要返回的地址。程序计数器R15指向当前指令的下两条指令的地址。1.5.3程序状态寄存器CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。每一种处理器模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器),当特定的异常中断发生时,存放CPRS的内容。CPRS的格式31302928272676543210NZCVQDNM(RAZ)IFTM4M3M2M1M0条件标志位:标志位含义N当前指令运算结果的bit[31]两个补码表式的有符号整数运算
4、,N=1,表式运算结果为负数ZZ=1表式运算的结果为0对于CMP指令,Z=1表式比较的两个数大小相等C加法指令(包括CMN)结果产生进位时C=1,表式无符号数运算发生上溢出减法指令(包括CMP)运算中发生错误时C=0,表式无符号数运算发生下溢出包含移位操作的非加/减法C中包含最后一次被溢出的位的数值对于其他非加/减法运算,C的值通常不受影响V对于加/减运算,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出Q标志位在ARMv5的E系类处理器,CPSR的bit[27]称为Q标志位,用于指示增
5、强的DSP指令是否发生了溢出。SPSR中bit[27]也是Q标志位,在异常中断发生时保存和恢复CPSR的Q标志位。CPSR中的控制位I,F,T及M[0:4]称为控制位。发生异常中断时发生变化。中断禁止位I=1禁止IRQ中断..F=1禁止FIQ中断。T控制位控制指令执行状态说明本指令是ARM指令还是Thumb指令M控制位M[0:4]控制处理器的模式M[4:0]处理器模式可访问的寄存器0B10000UserPC,R14~R0,CPSR0B10001FIQPC,R14_fiq-R8_fiq,R7~R0,CPSR,S
6、PSR_fiq0B10010IRQPC,R14_irq-R13_irq,R12~R0,CPSR,SPSR_irq0B10011SupervisorPC,R14_svc-R13_svc,R12~R0,CPSR,SPSR_svc0B10111AbortPC,R14_abt-R13_abt,R12~R0,CPSR,SPSR_abt0B11011UndefinedPC,R14_und-R13_und,R12~R0,CPSR,SPSR_und0B11111systemPC,R14~R0,CPSR(ARMv4及更高版本)
7、1.6ARM体系的异常中断在ARM体系中通常有3种方式控制程序的执行流程:u在正常程序执行中,每执行一条ARM指令,PC加4个字节;每执行一条thumb指令,PC加2个字节。u通过跳转指令:B指令执行跳转操作;BL指令在执行跳转时保存子程序的返回地址;BX指令在执行跳转时根据目标地址的最低位可以将程序状态切换到Thumb状态;BLX指令执行3操作,跳转到目标地址处执行,保存子程序的返回地址,根据目标地址的最低位将程序状态切换到Thumb状态。u异常中断发生,系统执行完当前指令,跳转到相应的异常中断处理程序出执
8、行。1.6.1ARM中异常中断种类异常中断名称含义复位(Reset)处理器的复位引脚有效,有下面几种情况:系统加电时系统复位时跳转到复位中断向量处执行,称为软复位未定义的指令UndefinedinstructionARM处理器或者系统中的协处理器认为当前指令未定义软件中断SoftwareinterruptSWI由用户定义的中断指令指令预取中止Prefechabort如果处理器预取的指令的地址不存在,