程序状态寄存器(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. openOffice安装

    [root@rusky openOffice]# tar -zxvf OOo_3..0_Linux_x86_install-rpm-wJRE_zh-CN.tar.gz [root@rusky open ...

  2. C#,.net获取字符串中指定字符串的个数、所在位置与替换字符串

    方法一: public static int indexOf (字符串/字符,int从第几位开始,int共查几位) string tests = "1absjjkcbfka2rsbcfak2 ...

  3. 在div+css中用到的js代码注意return

    今天做了一个项目,美工做好后放在了form中(没有加runat=server),由于用到了服务器控件,所以这里要加,否则报错,关键一段div代码是: <form id="form_re ...

  4. cocos2dx 帧动画(iOS)

    植物大战僵尸的植物摇摆效果 //帧动画 Animation *animation = Animation::create(); Sprite *sprite = Sprite::create(&quo ...

  5. swt

    http://blog.sina.com.cn/s/blog_557ebb4c0101mgtc.html http://blog.csdn.net/kagoy/article/details/1746 ...

  6. Guava API学习之Optional 判断对象是否为null

    java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了.为了防止抛出这个异常,我们经常会写出这样的代码: Person person = p ...

  7. php魔术方法——构造函数和析构函数

    php有一类很神奇的方法,这些方法是保留方法,通常不会在外部被显式调用,他们使用双下划线(__)开头,他们被称为魔术方法(Magic Methods).php官方也不建议定义其他双下划线开头的方法. ...

  8. PHPExcel用法有感

    今日项目需求导出excel.我用最简单的header头方式导出了,但是需求部门退回了,说不满足他们的需求,需要我按照他们的模板来导出. 然后想到了PHPExcel,没用过,走了不少弯路. 1.去官网下 ...

  9. pubwin数据云备份

    由于pubwin自带的异地备份一直不好用,并且pubwin自带的37分钟备份也不方便手动备份,考虑用python 与写一个基于酷盘的pubwin数据备份工具(本来想基于百度云的,发现百度云用的人太多, ...

  10. Android性能优化学习

    工作以来,越来越觉得性能优化的重要性,从技术角度,它甚至成了决定一个app成败的最关键因素.因此,特地花时间去学习专研性能优化的方法. 学习性能优化最便捷的方式便是研读别人有关性能优化的博客,然而网上 ...