处理器模式

用户模式(user)简称usr

快速中断模式(FIQ)简称fiq

外部中断模式(IRQ)简称irq

特权模式(supervisor)简称sve

数据访问终止模式(abort)简称abt

未定义指令后终止模式(undefined)简称und

除了用户模式以外,其他的模式成为特权模式,这些模式下,程序可以访问所有系统资源,也可以任意进行处理机模式

处理其模式可以通过软件进行控制,可以同国外部中断或者是异常处理进行切换,大多数的用户程序运行在用户模式下,这时候应用程序不能访问一些受系统保护的系统资源

ARM处理器共有37个寄存器

其中包括: 31个通用寄存器和程序计数器(pc)这些寄存器都是32位寄存器

      6个状态寄存器,这些寄存器都是32位寄存器,但是目前只是用了其中的12位

通用寄存器的分类

      未备份的寄存器:R0~R7

      备份寄存器P8~R14

      程序计数器PC,即R15

未备份的寄存器:RO~R&,对于每个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器,在异常中断造成处理器模式切换,由于不同的处理其模式使用相同的物理地址,可能造成寄存器数据被破坏,未备份寄存器没有被系统用于别的特殊的用途,任何可采用通用寄存器的场合都可以用未备份寄存器

备份寄存器

    对于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理地址,例如在快速终端模式下,R8和R9分别记做R8_fiq,R9_fiq,当使用用户模式下的寄存器的时候,寄存器R8he寄存器R9分别记作R8_usr,R9_usr,这两种情况使用的物理地址是不同的,系统没有见这几个寄存器用于任何的特殊用途

    对于备份的寄存器R13和R14来说,每个就处理器对应6个不同的物理地址,其中一个是用户模式和系统模式共用的,另外的5个是对应于其他5中处理机模式

寄存器R13在ARM模式下常用作堆栈指针,每一种异常模式都有自己的物理的值的R13,因此,初始化应用程序是应该初始化R13,使其指向异常模式专用的堆栈地址

寄存器R14又称为链接寄存器,在ARM体系结构中具有下面两种用途

  1:每一种处理器模式自己的物理地址R14中存放当前子程序的返回地址,当通过BL或者BLX指令调用子程序时,R14被设置成该子程序的返回地址

  2:但异常中断发生时,该异常模式特定的物理R14被设置成异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移,具体的返回方式与上面的子程序返回基本相同

  

程序计数器PC R15

  由于ARM采用了流水线机制,当正确读取了PC的值的时候,该值为当前指令地址值加8个字节(因为是32位的)因此一次处理的是32位(也就是4个字节)

  当成功向R15写入一个地址数值的时候,程序将跳转到改地址进行执行

程序状态寄存器CPSR

   CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问,它包含了条件标志位,中断净值为,当前处理器模式标志以及其他的一些控制位,每一种模式下都有个专用的物理状态的状态寄存器(称为SPSR)但特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,当异常中断退出时,可以用SPSR中保存的值来恢复CPSR

   

程序状态寄存器的格式如下:

N = 1表示结果为负数,N= 0表示结果为正数

z = 1表示结果为0,z = 0表示结果不为0

c表示有进位借位情况发生

v表示有溢出

I表示中断IRQ,F表示中断FIQ,T表示运行的状态,当T= 1表示运行在THUMB上,当T = 0 表示运行在ARM状态

后面的四位表示其中模式的选择

转载请注明链接地址:http://www.cnblogs.com/fengdashen/p/3724709.html

ARM处理机模式--内部寄存器的更多相关文章

  1. ARM(哈弗、冯氏结构、总线和IO访问、处理器状态和处理机模式)

    1.哈弗结构与冯氏结构 (1)区别: 是否有独立的存储架构和信号通道. (2)举例: 8086:冯氏结构(相同的存储相同的通道) STM32F103:哈弗结构(不同的存储.通道) 8051:改进的哈弗 ...

  2. ARM工作模式

    ARM工作模式 学习ARM的最好的资料是ARM公司发布的资料:ARM Architecture Reference Manual.pdf 找到章节:Programmers’ Model 由文档可知:A ...

  3. ARM处理器模式

    ARM处理器模式 ARM处理器共有7种运行模式: l  用户模式(User,usr):正常程序执行的模式 l  快速中断模式(FIQ,fiq):用于高速数据传输和通道处理 l  外部中断模式(IRQ, ...

  4. arm工作模式笔记

    linux用户态程序即应用程序,在user模式 linux内核运行在svc模式 arm七个模式: usr用户模式 fiq快速中断模式 irq普通中断模式 supervior   svc模式 abort ...

  5. 浅析arm的异常、中断和arm工作模式的联系

    说到异常向量,会让人联想到中断向量.其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种. 回到异常向量,他其实是一张表格,每个格子里存放的是一个地址,或者是一个跳转命令,不管是哪个,其目的 ...

  6. ARM编程模式和7钟工作模式

    一. ARM的基本设定 1.1. ARM 采用的是32位架构 1.2. ARM约定: a. Byte : 8 bits b. Halfword :16 bits (2 byte) c. Word : ...

  7. ARM工作模式寻址

    用户模式(User)                 usr 快速中断模式(FIQ) fiq 普通终端模式(IRQ)     irq 保护模式(Supervisor) svc 数据访问终止模式(Abo ...

  8. ARM体系的7种工作模式

    一.ARM体系的CPU有以下7种工作模式:   用户模式(usr)    大多数程序运行于用户模式 特权模式   系统模式(sys)   运行具有特权的操作系统任务 异常模式 中断模式(irq)   ...

  9. 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)

    : 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...

随机推荐

  1. java中的freopen

    在做ACM题目的时候,为节省输入测试数据的时间,我们通常将数据复制到一个文本文档里,然后从文档里读出,避免在控制台一个数据一个数据的输入. 之前一直用的C/C++,freopen用起来很方便,如下: ...

  2. java nio管道

    管道(Pipe) (本部分原文链接,作者:Jakob Jenkov,译者:黄忠,校对:丁一) Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据 ...

  3. 【动态规划】流水作业调度问题与Johnson法则

    1.问题描述:     n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每个作业加工的顺序都是先在M1上加工,然后在M2上加工.M1和M2加工作业i所需的时间分别为ai和bi ...

  4. 喵星人教你记 HTTP 状态码

    记忆HTTP状态码是有一些困难的,因为状态码很多且很难记忆.GirlieMac,也就是Tomomi Imura利用她巧妙的构思,PS了一系列的HTTP状态信息.在你看过这些图片之后,你绝对可以记住一些 ...

  5. Linux下禁用、启用SeLinux

    一些Linux默认都是启用SeLinux的,在安装操作系统的时候我们可以选择开启或者关闭SeLinux,但是在安装完系统之后又如何开启与关闭呢? 在/etc/sysconf下有一个SeLinux文件, ...

  6. UVa 1453 - Squares 旋转卡壳求凸包直径

    旋转卡壳求凸包直径. 参考:http://www.cppblog.com/staryjy/archive/2010/09/25/101412.html #include <cstdio> ...

  7. Lotus Notes中编程发送邮件(二)

    在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字.另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址.而正常情况下,发送邮 ...

  8. 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(老罗学习笔记3)

    简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中.接着,在Ubuntu上为Android系统编写Linux内核驱动程序(老罗学习笔记1)一文中举例子说明了如何在 ...

  9. MySQL中REGEXP正则表达式使用大全

    REGEXP在mysql是用来执行正则表达式的一个函数 像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看. ...

  10. std::ofstream由二进制流写文件的问题

    从MPQ包中读取二进制流出来然后文件写到硬盘. DWORD size = SFileGetSize(hFile); char* buffer = new char[size]; std::ofstre ...