简单网站后台,淘宝网站网页图片怎么做,网站建设如何投放广告,婚庆公司怎么开店以下内容源于朱有鹏嵌入式课程的学习与整理#xff0c;如有侵权请告知删除。 一、ARM采用32位架构 ARM约定一个Byte是8 bits#xff0c;一个Halfword是16 bits (2 byte)#xff0c;一个Word是32 bits (4 byte)。 大部分ARM core 提供ARM 指令集#xff08;32 bit#xff0…以下内容源于朱有鹏嵌入式课程的学习与整理如有侵权请告知删除。 一、ARM采用32位架构 ARM约定一个Byte是8 bits一个Halfword是16 bits (2 byte)一个Word是32 bits (4 byte)。 大部分ARM core 提供ARM 指令集32 bit每条指令都是4个字节Thumb 指令集16bitThumb2指令集16 32bit。 二、ARM的7种基本工作模式 ARM的工作模式分为普通模式、特权模式其中特权模式又细分为六种模式。 诸多模式是为了满足操作系统的安全等级需要各种模式下可以访问的寄存器不同。 注意同一时刻CPU只处于其中一种模式。 程序员可以修改CPSR寄存器实现各个模式的切换CPU在某些情况下也会自动切换。 普通模式Normal 1用户模式User非特权模式大部分任务执行在这种模式。 特权模式Privilege 2快速中断模式FIQ当一个高优先级fast) 中断产生时将会进入这种模式。 3普通中断模式IRQ当一个低优先级normal) 中断产生时将会进入这种模式。 4超级用户模式SVC当复位或软中断指令执行时将会进入这种模式。 5中止模式Abort当存取异常时将会进入这种模式。 6未定义模式Undef当执行未定义指令时会进入这种模式。 7系统模式System使用和User模式相同寄存器集的特权模式。 三、ARM的37个通用寄存器 1、寄存器分类 SoC中有2类寄存器即通用寄存器、特殊功能寄存器SFRspecial function register。 1通用寄存器 通用寄存器是CPU的组成部分CPU的很多活动都需要通用寄存器的支持和参与。 通用寄存器没有地址通过寄存器名字来访问。 ARM一共有37个通用寄存器。 2特殊功能寄存器 特殊功能寄存器属于外设硬件的组成部分。使用软件编程控制某一硬件其实就是编程读写这个硬件的特殊功能寄存器。 注意特殊功能寄存器有地址通过地址来访问寄存器。 2、ARM的37个通用寄存器 1影子式设计 注意上图中除了Abort模式列出所有的寄存器外其他模式只列出对应位置该模式下特有的寄存器没有列出的寄存器则说明和Abort模式共用。比如User模式下有自己的r13和r14寄存器其他寄存器和Abort模式相同。 这样算下来ARM总共有 37 个寄存器但最多只能同时存在18个寄存器。有些寄存器虽然名字相同但是在当前模式是不可见的。比如在ARM中有6个名叫r13的寄存器但在特定处理器模式下只有一个r13是当前可见的其他的r13必须切换到对应的模式才能看到。这种设计叫影子寄存器。 这样设计的好处是当各种异常发生的时候每种异常模式都可以保存一些重要的数据异常处理程序完成之后返回异常前的程序时不会破坏原有的寄存器或状态。 2重要的寄存器 这37个寄存器都是32位长度值得重点理解的寄存器有以下几个。 程序控制寄存器PCProgram Control Register 这个寄存器存放着将要执行的指令的地址它指向哪里CPU就会执行哪条指令所以程序跳转时把目标代码的地址放到PC寄存器中。注意整个CPU只有一个PC寄存器。 程序状态寄存器CPSRCurrent Program Status Register 这个寄存器用来记录CPU的当前状态。注意整个CPU只有一个CPSR寄存器。 程序状态保存寄存器SPSRSaved Program Status Register 用来保存CPSR的子程序返回时将SPSR赋给CPSR。注意整个CPU有5个SPSR寄存器。 连接寄存器LRLink Register 这个寄存器的主要作用如下。 一是调用子程序时用来保存子程序返回地址子程序返回时返回到哪个地址。当通过bl或blx指令调用子程序时硬件会自动将子程序返回地址保存在LR寄存器中。在子程序返回时把LR的值复制到PC即可实现子程序返回。比如可以使用mov pc,lr完成子程序返回。 二是当异常发生时LR中保存的值等于异常发生时PC的值减4因此在各种异常模式下可以根据LR的值返回到异常发生前的相应位置继续执行。 四、程序状态寄存器CPSR 程序状态寄存器CPSR在CPU中只有一个是32bit的记录着CPU的当前状态。 程序状态寄存器每个bit的含义如下。 1bit31~28是条件位 N Negative result from ALUZ Zero result from ALU C ALU operation Carried outV ALU operation oVerflowed2bit27是Q位 仅ARM 5TE/J架构支持用来指示饱和状态。 3bit24是J位 仅ARM 5TE/J架构支持J 1处理器处于Jazelle状态。 4bit7~6是中断禁止位 I 1 表示禁止IRQ。F 1 表示禁止FIQ。5bit5是T位 仅ARM xT架构支持。T 0 表示处理器处于 ARM 状态。T 1 表示处理器处于 Thumb 状态。6bit0~4是Mode位 这是处理器模式位。 7总结 CPSR中各个bit位表明了CPU的某些状态信息这些信息非常重要和后面学到的汇编指令息息相关比如BLE指令中的E就和CPSR中的Z标志位有关。 CPSR中的I、F位和开中断、关中断有关。 CPSR中的mode位bit4bit0共5位决定了CPU的工作模式在uboot代码中会使用汇编进行设置。