工作模式_ufisaus

  • USR(User) :正常程序的执行状态
  • FIQ(Fast interrupt) :用于高速数据传输和通道处理
  • IRQ(Interrupt) :通常的中断处理
  • SVC(Supervisor) :供操作系统使用的一种保护模式,复位或执行SWI进入该模式
  • ABT(Abort) :可用于虚拟存储以及存储保护,当数据或指令预取终止时进入该模式
  • UND(Undefined) :可用于支持硬件协处理器的软件仿真,未定义的指令执行时进入该模式
  • SYS(System) :运行具有特权的操作系统任务

Note:

  • 除了USR和SYS外都是异常模式
  • 除了USR外都是特权模式 , 特权模式可以通过直接修改CPSR中相应的位来切换到USR,但是USR不能直接修改CPSR,只能通过指令,
  • OS的内核态程序工作在SVC模式, 用户态程序工作在USR模式
  • ARM的CPU复位就处于SVC模式,执行完启动代码后就需要切换到USR模式

运行状态

  • ARM状态:执行ARM指令时,32位指令,当处理器执行在ARM状态,所有的指令必须word对齐(所有指令的起始地址都是4的整数倍),所以PC的[1:0]是没有作用的,
  • Thumb状态:执行Thumb指令时,16位指令, 当处理器执行在thumb状态,所有的指令必须halfword对齐,所有指令的起始地址都是2的整数倍,所以pc的[0]是没有定义的
  • Jazelleh状态,是byte对齐的

    指令/数据本身是多少位的,存储的起始地址就是多少位的整数倍

通用寄存器

  • R13 :SP,Stack Pointer,当前模式的栈指针,永远指向栈顶,压栈就是将寄存器的值放入栈中同时移动sp,出栈就是将栈中的值放入寄存器同时移动sp,用于保护现场,例如进行多级跳转时,只有一个LR寄存器肯定是不够用的,这时就可以将函数返回的地址进行压栈,函数执行完毕再将地址出栈到PC
  • R14 :LR,Link Register,保存函数调用返回的位置,存储pc下一条指令的地址,调用函数返回之间将pc的值赋值给lr(mov pc, lr),就可以返回原程序
  • R15 :PC,Program Counter,当前"执行"指令的地址+8byte,不论是多少级流水,PC永远指向当前执行指令的下两条位置,更多级的流水都是在"执行"之后的级数

状态寄存器_NZCV-iftm

CPSR(Current Program Status Register):程序状态寄存器

SPSR(Saved Process Satus Register):cpsr的备份寄存器

[31]:N, =1表示结果为Negative

[30]:Z, =1表示结果为Zero

[29]:C, =1表示计算有Carry(进位) , 如果ALU有加法运算,且产生了进位,则C位自动置1,如果ALU有减法运算,且产生了借位,则C位自动置0

[28]:V, =1表示计算有oVerflow(溢出)

[27:8]:保留

[7]:I, IRQ的屏蔽位,=1表示禁止IRQ

[6]:F, FIQ的屏蔽位,=1表示禁止FRQ ,芯片的一上电默认就是将if两个位置1,因为初始化代码执行期间系统还没准备好,响应中断没有意义,一般在启动代码执行的最后手动将这两位清0,进入系统

[5]:T, 标识当前CPU的工作状态, =1表示执行Thumb指令 ,该位不能直接被修改,必须用过bic修改

[4:0]:M, CPU工作模式位, 任何模式都可以读,只有特权模式可以写

异常_firdpsur

FRQ:当硬件产生FRQ信号触发该异常 -> FRQ

IRQ :当硬件产生IRQ信号触发该异常 -> IRQ

PretchAbort:当取指令出错 -> ABT

Data Abort:当取数据出错 -> ABT

SWI :软中断异常,执行汇编指令 “swi” -> SVC

Undefine:CPU解码到不认识的机器指令, -> UND

Reset:复位异常,按下复位键触发该异常, -> SVC

异常向量表

早期的ARM会在0地址处放置一张表,表的每一项都对应的了发生该类异常时的处理函数的地址,现在的ARM核可以在初始化代码中指定异常向量表的位置,不过默认还是0地址处。在ARM体系中,异常终端向量表的大小为32byte.每个异常中断占4byte,这4byte存储一条跳转指令或者一个向PC寄存器中赋值的数据访问指令,通过这两种指令,程序跳转到相应的异常中断处理程序。

ARM 的异常也是有优先级的,Reset > DataAbort > FIQ > IRQ > PrefetchAbort > SWI > Undef。 在执行高优先级的异常处理程序时,不允许被低优先级的异常中断,但是反过来可以。

FIQ比IRQ快的3个原因

  1. FIQ的优先级比IRQ高,同时发生时会优先执行FRQ
  2. FIQ对应的FIQ模式有更多的私有寄存器,这意味着如果FIQ如果用到R8~R12这些寄存器,不需要像IRQ一样先把原来的寄存器值进行压栈
  3. FIQ在中断向量表的最高处,这就为我们直接在FIQ上面的地址直接写异常处理程序提供了可能,其他的异常必须通过跳转,而跳转就需要保存IR值

当异常产生时,硬件自动做的4件事

  1. 复制CPSR寄存器的内容到SPSR_<mode> //eg,产生了reset异常,复制内容到SPSR_<svc>
  2. 修改CPSR寄存器
    1. 切换为ARM状态 (CPSR的T位置0)
    2. 切换到异常模式 (CPSR的M位[4:0]置相应的值)
    3. 禁止必要的中断 (CPSR的IF位置1)
  3. 存储返回地址到LR_<mode>寄存器
  4. 设置PC为相应的异常入口地址

当异常处理结束,返回时软件要做的2件事

  1. SPSR_<mode>恢复CPSR
  2. 拷贝LR_<mode>的内容到PC

ARM体系结构的更多相关文章

  1. ARM体系结构简介

    ARM体系结构简介 新一代的ARM9处理器,能达到两倍ARM7的处理能力,它们的区别如下: ARM微处理器的工作状态(可切换): 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令 第二种为 ...

  2. ARM体系结构和汇编指令

    第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...

  3. ARM体系结构_DAY2

    程序状态寄存器(CPSR) Mode位[4:0]:处理器模式为 USER模式不能直接切换到特权模式,在特权模式下可以直接修改mode位[4:0]为10000,切换到USER模式. T bit位[5]: ...

  4. ARM体系结构与编程

    ARM处理器的7中执行模式:usr.fiq.irq.svc.abt.und.sys. ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在全部模式下指的都是同一个物理寄存器:备份寄 ...

  5. 1.0ARM体系结构-ARM体系结构

    对ARMcpu有整体而专业的认识. ARM只是设计arm核,而不生产. ARM 掌握的是标准.

  6. ARM体系结构总结

    特殊功能寄存器与外设绑定,通用寄存器是与CPU绑定. ARM是RISC架构 常用ARM汇编指令只有二三十条 ARM是低功耗CPU ARM的架构非常适合单片机.嵌入式.尤其是物联网领域:而服务器等高性能 ...

  7. ARM体系结构与编程-3

    ARM存储系统:ARM中用于存储管理的系统控制协处理器CP15:包括16个32位寄存器,其编号为0到15.实际上对于某些编号的寄存器可能相应有多个物理寄存器. 訪问CP15寄存器的指令:MRC.MCR ...

  8. ARM体系结构与编程-5

    GET通经常使用于包括定义常量的源文件. 比如:GET 2440addr.inc 用AREA定义一个段.ENTRY用于指定程序的入口点,END用于告诉汇编器源文件已经结束. 比如: AREA init ...

  9. ARM体系结构与编程读书笔记——处理器的寄存器

    ARM处理器共有37个寄存器,其中包括: 31个通用寄存器,包括程序计数器(PC)在内,寄存器都是32位: 6个状态寄存器,这些寄存器都是32位的,目前只使用了其中12位: 通用寄存器 可以分为下面3 ...

随机推荐

  1. [moka同学笔记]Yii2.0 modal的使用

    第一次使用,时候不明白什么原理,大概用了几次后,才模模糊糊搞清楚原来是怎么一回事,现在就把写过的代码,贴在下边. 1.在视图文件中, 第一步首先在index.php文件中 做了一个a链接的按钮 调用了 ...

  2. LR常见问题整理

    1.LoadRunner录制脚本时为什么不弹出IE浏览器? 当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决. LR11 无法弹出ie浏览 ...

  3. ssh: command not found的解决办法

    原来是没装ssh的客户端软件,晕死…… yum -y install openssh-clients

  4. Skippr – 轻量、快速的 jQuery 幻灯片插件

    Skippr 是一个超级简单的 jQuery 幻灯片插件.只是包括你的网页中引入 jquery.skippr.css 和 jquery.skippr.js 文件就能使用了.Skippr 能够自适应窗口 ...

  5. 经典案例:那些让人赞不绝口的创新 HTML5 网站

    在过去的10年里,网页设计师使用 Flash.JavaScript 或其他复杂的软件和技术来创建网站.但现在你可以前所未有的快速.轻松地设计或创造互动的.有趣好看的网站.如何创建?答案是 HTML5 ...

  6. 优秀的 HTML5 实战教程,提升你的综合开发能力

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

  7. LigerUI一个前台框架增、删、改asp.net代码的实现

    先上代码:前台代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. javascript --- Function模式

    回调函数 在javascript中,当一个函数A作为另外一个函数B的其中一个参数时,则称A函数为回调函数,即A可以在函数B的运行周期内执行(开始,中间,结束). 举例来说,有一个函数用于生成node. ...

  9. 2013 Visual Studio Magazine读者选择奖界面框架类获奖情况

    2013 Visual Studio Magazine读者选择奖已经正式揭晓了!据了解,截至今年此奖项已经评选了21次,非常值得.NET开发人员信赖和参考.此次评选共有400多个产品角逐28个分类的奖 ...

  10. jsp声称的java文件位置

    想找到JSP生成的字节码文件还是Java文件,这得看你加载Web应用是自己配置的Tomcat还是加载到Eclipse默认路径下:先说Eclipse默认路径下的吧,其路径为:你的eclipse存放工程的 ...