程序状态寄存器(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. Linux实现密钥登陆

    公司为了安全,一直都采用密钥登陆远程SSH,现在有了自己的服务器,自己又学者配了一把,下面就是配置笔记. 1.登陆未设置密钥的Linux服务器 2.工具新建用户密钥生成向导 3.选择生成密钥的加密方式 ...

  2. mybati之运行过程

    mybatis其实就只有两个配置文件(mybatis-config.xml与mapper.xml) mybatis-config.xml配置基本的数据,和数据源,全局参数 mapper.xml 多个s ...

  3. HTML基础总结<链接>

    HTML 超链接(链接) HTML使用标签 <a>来设置超文本链接. 超链接可以是一个字,一个词,或者一组词,也可以是一幅图像,您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分. ...

  4. CSS 特殊样式设置集合

    1. 父窗口宽度不定,要求内部两个子块, 第一个子块宽度固定,第二个子块宽度自适应. 第一个子块宽度固定,定位为绝对定位 position:absolute;  第二个子块设置margin-left即 ...

  5. lvs+keepalived+nginx+tomcat

    # 拓扑如下所示 # 节点分布情况 LVS-dr-master eth0: 192.168.146.141 LVS-dr-slave eth0: 192.168.146.142 nginx1: eth ...

  6. iOS_SN_地图的使用(3)

    地图的定位,记得不用定位的时候要关掉定位不然会一直定位,使电量使用过快. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...

  7. php模板引擎技术简单实现

    用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化 tpl.class.php主要解析 as ...

  8. 使用接口的方式调用远程服务 ------ 利用动态调用服务,实现.net下类似Dubbo的玩法。

    分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按 ...

  9. 命令行工具命令 - run包到手机里

    命令行工具命令 你完全可以选择不输入以下这些命令,执行这些命令的结果与在 Android Studio 中单击"运行"按钮是一样的. chmod +x gradlew - 此命令只 ...

  10. [SQL注入2]FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION

    FROM SQL INJECTION TO SHELL: POSTGRESQL EDITION 这里先介绍一下POSTGRESQL.这是一款数据库管理系统,与oracle是同类型软件.08年左右的市场 ...