前言

           以下内容是个人学习之后的感悟,转载请注明出处~

ARM工作模式

ARM工作模式根据功能不同,可分为7类:

  • User Mode:用户模式。操作系统的Task一般以这种模式执行。User Mode是ARM唯一的非特权模式,这表示如

果CPU处于这种模式下,很多指令将不能够执行,因此操作系统的资源得以保护。

  • System Mode:这是V4及其以上版本所引入的特权模式。
  • IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。
  • FIQ Mode:快速中断模式。除了多了几个寄存器外,其他同IRQ一样。
  • Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。
  • Abort Mode:所有同内存保护相关的异常均在这种模式下执行。
  • Undefined Mode:处理无效指令的异常处理函数在这种模式下执行。

ARM工作模式也可分为3大类:

  • 用户模式:User Mode
  • 系统模式:System Mode
  • 异常模式:所有其它5种模式

  为什么可以把7类功能不同的模式分为3大类呢?

  这是由于异常模式同用户模式和系统模式有一个不一样的地方,那就是,当CPU产生中断或异常而自动切换到相应

异常模式后,CPU会根据产生中断或异常的原因执行相应得中断或异常向量。这些向量的位置是CPU事先定义好的,目

前有两种选择: 
    (1)   处于内存低地址0x00000000~0x0000001c,这种情况被称之为Low vector

(2)   处于内存高低之0Xffff0000~0xffff001c,这种情况被称之为High vector。

一般的操作系统会在这些异常向量地址处放置一条跳转指令。至于到底是使用Low vector,还是使用High vector,由

CPU自己决定,ARM规范不做任何限制。

  程序可以通过读取CPSR的MODE域来判断CPU当前的执行模式。

  如何看待ARM的各种模式?要回答这个问题,我们要看不同模式下,有哪些东西不同。归纳来说,有如下两个方面的不同:

(1) 物理寄存器不同 
     (2) 权限不同

  如果将User Mode作为参考模式,那么: 
      (1) System Mode:寄存器一样,仅仅是权限不同 
      (2) 其他Exception Mode:寄存器不一样,权限也不一样

  从权限的角度看,System Mode和其他Exception Mode(FIQ,IRQ,Supervisor,Abort,Undefined)是一样的,

他们之间的区别仅仅是寄存器方面有一些差别。

  从寄存器角度看,我们可以将CPSR中的MODE域看作一个类似于片选的东西,当其值不一样,所选中的寄存器也不一样。

虽然指令中的寄存器是一样的,但是经过MODE域的片选后,实际就指向不同的物理寄存器了。

  必须要特别注意,SYSTEM模式和USER模式除了权限不一样外,其他都一样,这样可以让操作系统自由访问16个寄存器

(包括状态寄存器)。

  那么,模式切换是如何进行的呢?

(1) 执行SWI或Reset指令。如果在User模式下执行SWI指令,CPU就进入Supervisor模式。当然,在其它模式下执行SWI

指令,也会进入Supervisor模式,补过一般操作系统不会这么做。因为除了User模式是非特权模式下,其他模式都属于特权模式

(这说明ARM只有两种执行态,不想Dummy的X86,定义了4种执行态)。执行SWI一般是为了访问系统资源,在特权模式下可

以访问所有的系统资源。SWI指令一般用来用来为操作系统提供API接口。

(2) 有外部中断发生。如果发生了外部中断,CPU就会进入IRQ或FIQ模式,具体是哪种模式,得看外部的中断源是接到CPU

的那个Pin。

(3)  CPU执行过程中产生异常。最典型的异常是由于MMU保护所引起的内存访问异常,此时CPU会切换到Abort模式。如果

是无效指令,则会进入Undefined模式。

  从上面我们发现,有一种模式是CPU无法自动进入的,这种模式就是System模式。要进入System模式必须由程序员自己编写指

令来实现。其实很简单,在任何特权模式下改变CPSR的MODE域为System模式所对应得数字即可。进入System模式一般是为了利

用“System 模式”和“User 模式”下的寄存器是一样的。因此一般操作系统在通过SWI进入Supervisor模式后,做一些简单处理后,

就进入System模式。

  另外,在任何特权模式下,都可以通过修改CPSR的MODE域而进入其他模式。不过需要注意的是,由于修改的CPSR是该模式下的

影子CPSR,因此并不是实际的CPSR,所以一般的做法是修改影子CPSR,然后执行一个MOVS指令来恢复执行到某个断点并切换到新模式。 

存储器格式(字对齐)

  Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字

节到第七个字节放置第二个存储的字数据,一次排列。作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。

  存储器格式:

1、大端格式:高字节在低地址,低字节在高地址;

2、小端格式:高字节在高地址,低字节在低地址;

  指令长度:

  Arm微处理器的指令长度是32位的,也可以为16位(thumb状态下)。Arm微处理器中支持字节(8位),半字(16位),字(32位)

三种数据类型,其中,字需要4字节对齐,半字需要2字节对齐。

  注:所谓的指令长度是一条完整的指令的长度,而不是单纯的mov这3个字母长度。

ARM体系的CPU有两种工作状态

   1、ARM状态:处理器执行32位的字对齐的ARM指令;

2、Thumb状态:处理器执行16位的、半字对齐的Thumb指令;

  在程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的

内容。CPU上电处于ARM状态。

寄存器

  ARM有31个通用的32位寄存器,6个程序状态寄存器,共分为7组,有些寄存器是所有工作模式共用的,还有一些寄存器专属于每

一种工作模式:

  R13——栈指针寄存器,用于保存堆栈指针;

  R14——程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15的备份,而当发生中断或异常时,R14保存R15的返回值;

  R15——程序计数器;

  快速中断模式有7个备份寄存器R8—R14,这使得进入快速中断模式执行很大部分程序时,甚至不需要保存任何寄存器;

  其它特权模式都含有两个独立的寄存器副本R13、R14,这样可以令每个模式都拥有自己的堆栈指针和连接寄存器。

当前程序状态寄存器(CPSR)

  CPSR中各位意义如下:

  T位:1——CPU处于Thumb状态, 0——CPU处于ARM状态;

  I、F(中断禁止位): 1——禁止中断, 0——中断使能;

  工作模式位:可以改变这些位,进行模式切换。

以上是全部内容,如果有什么地方不对,请在下面留言,谢谢~

ARM之工作模式的更多相关文章

  1. ARM处理器工作模式

    学习ARM处理器参考的首选资料是ARM Architecture Reference Manual,是最专业权威的学习资料. ARM处理器共有7种工作模式,如表1-1和1-2所示: 表1-1 处理器工 ...

  2. [国嵌笔记][021-022][ARM处理器工作模式]

    [ARM处理器工作模式] 处理器工作模式 1.User(urs):用户模式,linux应用程序运行在用户模式 2.FIQ(fiq):快速中断模式 3.IRQ(irq):中断模式 4.Superviso ...

  3. 2.2 ARM处理器工作模式

    ARM Architecture Reference Manual Arm 指令框架手册 种工作模式 Processor mode Mode number Description User usr 0 ...

  4. ARM的工作模式和寄存器

    以前学的时候学的是S3C6410的开发板,它是三星公司推出的基于ARM v6架构(指令集),处理器是ARM11. ARM架构是构建每个ARM处理器的基础. 目前最新的是ARM v8架构:http:// ...

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

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

  6. 嵌入式中 ARM的几种工作模式 以及异常模式的优先级

    一.Arm工作模式: Arm微处理器支持7种工作模式,分别为: 1. 用户模式(Usr)            用于正常执行程序 2. 快速中断模式(FIQ)    用于高速数据传输 3. 外部中断模 ...

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

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

  8. ARM的编程模式

    ARM的编程模式 Linux ARM的工作状态 (主要指指令模式) 基本概述 32位架构 指令相关 ARM 32bit Thumb指令 16bit Thumb-2 16||32 bit 兼容 复位后开 ...

  9. ARM工作模式

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

随机推荐

  1. Jenkins 的安装与简单使用

    一.安装 项目中接触到了jenkins感觉是一个不错的项目发布构建工具,自己就简单的学习了一下,记录一下方便以后使用 jenkin下载地址:https://jenkins-ci.org/   我直接使 ...

  2. 怎样高速编译mediatek\operator以下代码

    mediatek\operator以下有单独的apk.也有overlay的数据,单独的apk会配置anroid.mk,找到相应的路径直接build. 假设是overlay,则编译原来应用的路径,比如 ...

  3. Web性能测试工具:Siege安装&使用简介

    在Web性能测试工具中,siege是比较热门和常见的,它有安装简单,使用简单,测试报告详细的特点. 并且可以在文本中预定义一系列待测试url模拟,并可设定一定并发量下持续指定时间or测试进行测试. 比 ...

  4. 您的安全性偏好设置仅允许安装来自 App Store 和被认可的开发者的应用

    您的安全性偏好设置仅允许安装来自 App Store 和被认可的开发者的应用. 安装macOS Sierra后,会发现系统偏好设置的“安全与隐私”中默认已经去除了允许“任何来源”App的选项,无法运行 ...

  5. MySQL Infobright 数据仓库快速安装笔记[转]

    [文章作者:张宴 本文版本:v1.1 最后修改:2010.05.18 转载请注明原文链接:http://blog.zyan.cc/infobright/] Infobright是一个与MySQL集成的 ...

  6. SAM4E单片机之旅——3、LED闪烁之定时器中断

    让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高 ...

  7. GCJ Qualification Round 2016 C题

    题意是给定了一个叫“jamcoin”的定义,让你生成足够数量满足条件的jamcoin. jamcoin其实就可以理解成一个二进制整数,题目要求的要么长度为16位,要么为32位,一头一尾两个位必须是1, ...

  8. 九度OJ 1115:数字求和 (基础题)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2396 解决:1507 题目描述: 给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? 输入: 输入一行 ...

  9. linux shell执行远程计算机上的命令或者脚本(ssh)

    大数据平台下经常建立设计多个节点的集群需要统一部署,这就设计到守护进程或者部署脚本在不同节点执行,如果能在master机器上,统一执行脚本,一次性启动整个集群的服务,感觉很nice.因为,分享如下内容 ...

  10. linux下配置yum源

    备份原yum源   /etc/yum.repos.d/centos一base.repo 下载yum源       wagt 源网址/源名称/etc/yum.repos.d/原yum名