ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ARM体系结构和异常处理方式

2021-04-11 10:00:20  阅读:234  来源: 互联网

标签:中断 模式 CPU PC 指令 寄存器 异常 ARM 体系结构


 ARM 有7个基本工作模式:

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

  注意

  •                 除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模 式)。 
  •                 Privilege(特权模式)中除Sys模式外,其余5种为异常模式。 
  •                 各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是  CPU在某些情况下自动切换。 
  •                 各种模式下权限和可以访问的寄存器不同

CPU为什么设计这些模式?

  1. CPU是硬件,OS是软件,软件的设计要依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性。
  2. 操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要

 

ARM中的寄存器

*1.ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,在所有的寄存器中,有些是各模式共用同一个寄存器,有些寄存器是各个模式自己拥有独立的寄存器

2.例如对r14这个名字来说,在ARM 中共有6个名叫r14(又叫SP)的寄存器,但是在每种特定处理器模式下,只有一个r14是当前可见的(也就是说每种模式下有一个专属于这个模式的r14),其他的r14 必须切换到其它的对应模式下才能看到,这种设计叫影子寄存器(banked register)

3.ARM共有37个寄存器,都是32位长度,其中30个为通用的,1个固定用作PC,1个固定用作CPSR,5个固定用作五种异常模式下的SPSR。

arm各个寄存器的作用和功能可以参考这个博客https://blog.csdn.net/XiaoXiaoPengBo/article/details/78693811

ARM各个模式的寄存器如图:

 

 

 PC指针和SP指针

PC:Program Counter,是通用寄存器,但是有特殊用途,用来指向当前运行指令的下一条指令。

SP:Stack Pointer,堆栈指针,也是通用寄存器,用于入栈和出栈操作。

 

对于ARM7而言,是三级流水线结构,一条指令为4个字节大小,一条指令包含三个过程:Fetch(取指)、Decode(译指)、Execute(执行)。

CPU运行地址 = 当前PC值 = 当前程序执行位置 + 8;

对于ARM7而言,PC为R15,SP为R13。

PC不是指向正在执行的指令,而是始终指向下一个取指的指令。对于ARM7三级流水先结构和指令的三个过程,所以PC = 当前程序执行位置  + 8
 


什么是异常?

  • 正常工作之外的流程都叫异常
  • 异常会打断正在执行的工作,并且一般我们希望异常处理完成后继续回来执行原来的工作
  • 中断是异常的一种

异常向量表:

  • 所有的CPU都有异常向量表,这是CPU设计时就设定好的,是硬件决定的。
  • 当异常发生时,CPU会自动动作(PC指针跳转到异常向量处处理异常,有时伴随一些辅助动作)。
  • 异常向量表是硬件向软件提供的处理异常的支持。

中断向量:中断的地址的变量;

中断向量表:中断类型号与相应中断源的中断处理程序入口地址之间的连接表;

中断服务程序:中断时所执行的中断代码


 

*中断向量表定义的是什么?

*定义的就是中断服务程序的跳转指令,因为每个中断向量在向量表中只有很少字节的存储空间,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。这里cpu就可以找中断服务程序

当CPU产生了中断 ,CPU会先判断产生了什么类型的中断  然后就会去往 中断向量表的对应中断类型的地址中 查找接下来要进行的中断指令 然后跳转到存储该类型中断服务函数的地址 执行

ARM中断向量表和响应更加深入的内容可以参考这篇博客:https://blog.csdn.net/honour2sword/article/details/40213417

<--这就是ARM的中断向量表图示 左侧为地址(因为ARM是32位所以是4字节对齐)

例如:若发生了普通中断 ,PC指针会去到中断向量表的 IRQ地址处, 然后跳转到 IRQ对应的存储器的某个存放中断服务函数的地址 然后执行中断服务函数


 

 

 

 

 

 

 

 

 

 

 

标签:中断,模式,CPU,PC,指令,寄存器,异常,ARM,体系结构
来源: https://blog.csdn.net/zsffzb/article/details/115569894

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有