程序状态寄存器(CPSR)

Mode位[4:0]:处理器模式为

  USER模式不能直接切换到特权模式,在特权模式下可以直接修改mode位[4:0]为10000,切换到USER模式。

T bit位[5]:处理器状态位

  T = 0,J= 0处于ARM指令集状态

  T = 1,J= 0处于Thumb指令集状态  

  T = 1,J = 1处于ThumbEE指令集状态

中断禁止位[7:6]

  I = 1 进制IRQ

  F = 1 进制FIQ

条件位[31:27]

  • N位  Negative result from ALU  ALU运算结果为一个负数时, 此为自动置 1 否则为 0
  • Z位  Zero result from ALU  ALU运算结果为 0 时,此位自动置 1,否则为 0
  • C位  分为加法运算和减法运算两种情况:
    1. 进行加法运算,如果产生进位 C位自动置一
    2. 进行减法运算时,如果产生借位, C位自动置 0
  • V位  符号位溢出,(最高为产生变化,针对于有符号数来说) V位自动置 1

      计算机系统中,所有的数据都以 二进制补码 方式存储。

  

异常处理                                                                                                         

ARM 有 7 类中断源:

      偏移量  异常类别

  1.   0x1C  FIQ 快速响应中断
  2.   0x18  IRQ  外部中断
  3.   0x10  Data Abort  数据终止  当访问数据时,CPU不允许访问请求 会进入此种中断
  4.   0x0C  Perfetch Abort
  5.   0x08  software interrupt
  6.   0x04  Undefined Instruction  指令未定义异常  CPU取出一条指令,如果不能执行,此时会  将数据交由协处理器执行。若没有协处理器或者协处理器也不能处理,就会触发此中断
  7.   0x00  Reset  复位中断

7种异常对应的5种模式

异常源:  FIQ  IRQ  Reset/软中断      DataAbort/PerfetchAbort       Undef

CPU模式:  FIQ  IRQ  Supervisor(SVC)  Abort                   Undef  

异常处理过程:

  当异常产生异常时,ARM core(自动执行但不包括压栈操作):

  • 拷贝 CPSR(current program status register)内容到 SPSR_<mode>(saved program status     register)<mode>指的是具体哪一个状态的SPSR
  • 设置适当的 CPSR 位:
    1. 改变处理器状态进入ARM状态(处理异常时,必须在ARM状态下进行)
    2. 改变处理器模式进入相应的异常(特权)模式
    3. 设置中断禁止位,防止中断处理过程中产生中断(如果需要)

       Cortex A系列处理器,不允许同一类的中断嵌套   (处理FIQ时,不响应IRQ;处理IRQ时,可嵌套FIQ)

  • 保存返回地址到 lr_<mode>
  • 设置 pc 为相应的异常向量
  • ARM7、ARM9的异常向量表固定为0x00开始的一端内存中,cortex A系列默认为 0x00 但可以手动设置

  返回时,异常处理需要(中断处理程序中手动执行):

  • 从 SPSR_<mode>恢复 CPSR
  • 从 lr_<mode> 恢复 PC
  • Note:这些操作只能在 ARM 状态执行

异常源类型,对应处理器模式。

异常优先级
  Reset ——> Data Abort ——> FIQ > IRQ ——> Prefetch Abort ——> SWI→Undefined

FIQ 比 IRQ 快? 三方面原因:

  1. FIQ优先级高
  2. FIQ在中断向量表的最高偏移地址,在编程时可以直接在FIQ后面添加中断处理程序,省去了跳转指令。
  3. FIQ有多个私有寄存器(r8_r14),在中断处理程序中使用这几个寄存器时可以省去压栈,弹栈操作

指令流水线

三级流水线:

PC(program count)指向正在取指的指令。

PC - 4 为正在译码的指令。

PC - 8 为正在执行的指令。

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

  1. ARM体系结构简介

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

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

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

  3. ARM体系结构

    工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...

  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. USB 管道 && 端点

    管道是对主机和usb设备间通信流的抽象.      管道和usb设备中的端点一一对应,一个usb设备含有多少个端点,其和主机进行通信时就可以使用多少条管道,且端点的类型决定了管道中数据的传输类型.  ...

  2. 【转】UIKit性能调优实战讲解

    文/bestswifter(简书作者)原文链接:http://www.jianshu.com/p/619cf14640f3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 在使用UIKi ...

  3. TimeSpinner( 时间微调) 组件

    本节课重点了解 EasyUI 中 Spinner(微调)组件的使用方法,这个组件依赖于Spinner(微调)组件. 一. 加载方式//class 加载方式<input id="box& ...

  4. 从Ueditor跨域上传,总结的一次跨域上传的爬坑经历

    项目内其中一个管理后台需要发布文章,需要一个富文本编辑器,经过一番选择后,最终选择了百度的Ueditor. 由于上传的文件是上传到另一台专门存放图片等静态资源的服务器上面的,所以就涉及到了跨域上传. ...

  5. Android系统中长按事件的实现机制解析

    在Android的触摸消息中,已经实现了三种监测,它们分别是 1)pre-pressed:对应的语义是用户轻触(tap)了屏幕 2)pressed:对应的语义是用户点击(press)了屏幕 3)lon ...

  6. iPhone手机的屏幕尺寸、分辨率及适配

    1.iPhone尺寸规格 设备 iPhone 宽 Width 高 Height 对角线 Diagonal 逻辑分辨率(point) Scale Factor 设备分辨率(pixel) PPI 3GS ...

  7. osg添加纹理示例

    转自http://www.cnblogs.com/ylwn817/articles/1976851.html #include <osgDB/ReadFile>#include <o ...

  8. 单服务员排队模拟100天matlab实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang %单服务员排队模型模拟100天 clear clc day = 100 ;s = zeros(1, ...

  9. Intellij Idea 12 加载weblogic8X的插件

    idea越用越习惯,只到idea12发布后,发现不在支持weblogic8X的server,无奈我们一批单一来源项目的coder. 后发现将idea11安装目录下plugins下的weblogicIn ...

  10. Qt编程之对QGraphicsItem点击右键弹出菜单

    就是对这个contextMenuEvent 事件重新实现,在这个事件函数中创建菜单,大概就是这样. void MyItem::contextMenuEvent(QGraphicsSceneContex ...