嵌入式Linux_ARM裸机_ARM的七种工作模式和37个寄存器

主要整理ARM处理器的七种编程模式。

ARM的基本属性

ARM采用的32位架构;Byte 8bit, HalfWord = 2B=16bits, Word = 32bits=4bits;

七种工作模式

ARM有七种基本工作模式:1个用户模式,6个特权模式(Privilege)。6个特权模式种除了sys之外,其余5种为异常模式;
模式之间可以通过代码(写CPSR寄存器)或者是CPU在某些情况下切换;不同模式下, 可以访问的寄存器(一共37个寄存器)不同。

  • User: 非特权模式,大部分任务在这种模式下工作;
  • System: 使用和User模式相同寄存器集的特权模式;
  • FIQ(Fast Interrupt Request):当一个高优先级中断产生时,会进入该模式;
  • IRQ(Interrupt Request):当一个低优先级中断产生时,进入该模式;
  • Supervisor: 当复位,或者软中断指令执行时,进入该模式;
  • Abort: 当存取异常时,进入该模式;
  • Undef: 当执行未定义指令时,进入该模式。

采用如此多模式的原因

这也是软硬件为了笔记兼容,更好工作的结果。操作系统有安全等级,CPU有各种模式,

ARM的37个寄存器

ARM的CPU中一共有37个寄存器。在CPU的七种工作模式,用户模式User和系统模式Sys拥有物理空间上完全相同的寄存器。其他五种特权(异常)模式,都自己独立的寄存器。如下图所示:每种工作模式的黑色部分是通用寄存器,不同的颜色代表不同模式下,独有的寄存器,比如,FIQ的独有寄存器是r8-r14,spsr等。这样做的好处是,当发生异常时,各个模式都保留自己的一些重要数据,使得异常处理程序完成后,返回异常前的程序时不会破坏原有的寄存器状态。
在这里插入图片描述
总结一下上图说的寄存器:

  1. User和Sys拥有的寄存器:r0-r15,CPSR寄存器。
  2. FIQ:r0-r7是通用的,r8-r14spsr是该模式特有的。
  3. IRQ:r0-12是通用的,r13、r14和spsr是该模式固有的。
  4. SVC:r0-12是通用的,r13、r14和spsr是该模式固有的。
  5. Undef: r0-r12是通用的,r13、r14和spsr是该模式固有的。
  6. Abort: r0-r12是通用的,r13、r14和spsr是该模式固有的。

SP(R13),LR(R14),PC(R15),CPSR

**R13(SP):**堆栈指针寄存器,当遇到异常时,程序可以将一般寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的完整性。
**R14:**当通过BL和BLX调用子程序时,硬件自动将子程序返回地址保存在R14中,子程序通过将R14复制到PC来实现返回。
**R15(PC)😗*程序计数器,读取的值是指令的地址加上8个字节;PC指向哪里,CPU就运行哪里;整个CPU只有一个PC。
CPSR程序状态寄存器:
在这里插入图片描述

  • 28,29,30,31位是条件位:
    N:如果结果是有符号的二进制补码下,结果为负数,N=1;如果为非负数,N=0;
    Z:判断是否为0,如果是结果是0,Z=1;否则N=0;
    C:进位情况:
    对于加法指令,产生进位,则C=1,否则C=0;
    对于减法指令,产生借位,则C=0,否则C=1;
    对于移位操作,C为最后移除位的值。
    V:溢出操作,对于加法指令,在操作数和结果都是有符号整数时,如果发生溢出,则V=1,无溢出,则V=0。
    27,Q位:指示饱和状态。
    24,J位:J=1,处于Jazelle状态(为Java字节码提供硬件加速的功能,提高了Java代码的执行效率).
    7 6,I,F: 中断禁止位:
    I=1,禁止IRQ,F=1,禁止FIQ。
    5,T:T=0,位ARM状态,T=1为Thumb状态。
    0-4处理器模式位。
    总结:CPSR中各个bit表明了CPU的某些状态信息,这些状态信息和汇编息息相关,下一篇写汇编指令。CPSR中,IF和中断开关有关;
    SPSR:
    程序状态保存寄存器(saved program status register),用于保存CPSR的状态,以便异常恢复后,恢复到以前的状态。

总结

这部分写了,7种工作模式,具体每种模式的工作模式以后遇到了再具体研究,又说了37个寄存器,每种模式对应上面的寄存器,r15固定用作pc寄存器,CPSR是固定的所有模式下共享的寄存器,5个SPSR是五种异常模式下的各自的寄存器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值