`
kongweile
  • 浏览: 507104 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

arm的7种执行模式

    博客分类:
  • ARM
 
阅读更多

ARMv4以上版本的CPU任何时刻必定处于如下7种执行模式之一: 
    (1) User Mode:用户模式。操作系统的Task一般以这种模式执行。User Mode是ARM唯一的非特权模式,这表示如果CPU处于这种模式下,很多指令将不能够执行,因此操作系统的资源得以保护。 
    (2) System Mode:这是V4及其以上版本所引入的特权模式。、 
    (3) IRQ Mode:中断模式。中断(不包括软中断)处理函数在这种模式下执行。 
    (4) FIQ Mode:快速中断模式。除了多了几个寄存器外,其他同IRQ一样。 
    (5) Supervisor Mode:监视模式。软中断(SWI)处理函数在这种模式下执行。 
    (6) Abort Mode:所有同内存保护相关的异常均在这种模式下执行。 
    (7) Undefined Mode:处理无效指令的异常处理函数在这种模式下执行。 

    程序可以通过读取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指令来恢复执行到某个断点并切换到新模式。 

     我们还可以将执行模式按照如下类型划分: 
     (1)  用户模式:User Mode 
     (2)  系统模式:System Mode 
     (3)  异常模式:所有其它5种模式 

    为什么这样划分呢?这是由于异常模式同用户模式和系统模式有一个不一样的地方,那就是,当CPU产生中断或异常而自动切换到相应异常模式后,CPU会根据产生中断或异常的原因执行相应得中断或异常向量。这些向量的位置是CPU事先定义好的,目前有两种选择: 
    (1)   处于内存低地址0x00000000~0x0000001c,这种情况被称之为Low vector 
    (2)   处于内存高低之0Xffff0000~0xffff001c,这种情况被称之为High vector。    
     一般的操作系统会在这些异常向量地址处放置一条跳转指令。至于到底是使用Low vector,还是使用High vector,由CPU自己决定,ARM规范不做任何限制。

分享到:
评论

相关推荐

    ARM的七种执行模式解析

    ARM的七种执行模式解析

    ucos_ii_arm 提高μCOS-II在ARM上执行效率的几种方法

    ARM处理器有多种运行模式,每种运行模式有不同的堆栈, 这使得在ARM处理器上实现任务切换有其特殊性,本文利用ARM处理器在任务切换时堆栈的变化特点,优化设计堆栈操作方式和运行模式转化方式, 以减小任务切换时间...

    ARM.rar_ARM 指令集_arm指令集 中文_arm算数指令

    arm中文资料,ARM指令集(中文),对arm寄存器和处理器模式进行了说明,程序状态寄存器,寄存器装载和存储指令,算数和逻辑指令,移位操作,乘法指令,比较指令,分支指令,条件执行,软件终端指令,

    ARM处理器的2种工作状态和7种工作模式及37个寄存器介绍

    本文主要跟大家来详细的介绍ARM处理器的两种工作状态和七种工作模式,奉上ARM处理器37个寄存器的详细介绍。 ARM处理器的两种工作状态 1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。 2、Thumb状态,16位,...

    ARM 处理器启动代码的分析与设计

    目前,ARM系列的通用32位RISC微处理器有ARM7、ARM9、ARM9E、ARM10等多个产品,这些处理器可以工作于7种模式下。除User模式以外的其它模式都叫做特权模式,除User和System以外的其它 5 种模式叫做异常模式。大...

    ARM_《IQ》中文杂志_2009_Spring_-4-Cortex-M3的优势

    在v4T架构的基础上,A RM又推出了 T humb指令集架构(I S A),这是一个16 位的I S A,可以改进代码密度(一般约为 ...便可始终以一种模式(Thumb-2)执行, 而不像ARM7那样需要在ARM/Thumb这 两种模式下切换。

    ARM指令集详解ARM指令集详解

    ARM指令集详解 ARM 指令集 寄存器和处理器模式(26-bit 体系) ...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    arm汇编手册(中文版).chm

    ARM 指令集 寄存器和处理器模式(26-bit 体系) ...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    ARM 指令集(全)

    ARM 的指令集 ARM 指令集 寄存器和处理器模式(26-bit 体系) ...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    ARM 指令集(英蓓特中文版chm格式)

    ARM 指令集 (chm格式查找比较方便,这个版本是网上常见的那个中文版本) <br>目录 寄存器和处理器模式(26-bit 体系) 寄存器和处理器模式(32-bit 体系) 程序状态寄存器和操纵它的指令 寄存器...

    嵌入式ARM系统代码固化的串口实现--千锋培训

    文档介绍了前言,1 烧写原理及过程,2 监控程序的设计,2.1 启动代码设计,arm处理器的7种运行模式,2.2 烧写主程序设计,2.3 编译与执行,结语

    ARM处理器及ARM处理器工作模式

    ARM微处理器的工作状态一般有两种,并可在两种状态之间切换: 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令; 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。

    ARM_Architecture_Reference_Manual_v7a-v7r_he.zip

    决定处理器如何工作的模式和状态,包括当前的执行权限和安全性。除了模型。ARMv7-R体系结构概要文件定义了一个受保护的内存系统体系结构(PMSA)。程序员模型,并使用协处理器接口来访问控制大多数处理器和内存系统...

    ARM 汇编指令 中文CHM版.rar

    ARM汇编指令中文离线文档 目录: ARM 指令集 ...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    嵌入式系统/ARM技术中的ARM启动代码的设计

     目前,ARM系列的通用32位RISC微处理器有ARM7、ARM9、ARM9E、ARM10等多个产品,这些处理器可以工作于7种模式下。除User模式以外的其它模式都叫做特权模式,除User和System以外的其它5种模式叫做异常模式。大部分...

    amacc:小型C编译器,生成ELF可执行Arm架构,支持JIT执行

    AMaCC实现两种执行模式: 用于ARM后端的即时编译器(JITC) 生成具有可执行和可链接格式(ELF)的有效GNU / Linux可执行文件 值得一提的是,AMaCC旨在通过上述执行模式编译自托管所需的C的最小子集。 例如,存在...

    ARM 芯片汇编指令集

    ARM 指令集 -------------------------- 寄存器和处理器模式(26...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    OMAP-L138的新历程之ARM裸机中断AINTC

    omapl138 arm处理机执行中断的流程: 1.首先就是知道ARM状态下的通用寄存器和程序计数器,绿颜色的就是相应模式下的私有寄存器。就是说程序一般运行在系统和用户模式下,使用的是系统和用户模式下的通用寄存器,当...

    arm.zip_arm apcs_arm乘法伪指令_chm 格式的设计

    这是一本关于ARM 汇编语言程序设计 ARM 指令集 ...条件执行 软件中断指令 APCS (ARM 过程调用标准) 编写安全的 32-bit 代码的基本规则 IEEE 浮点指令 汇编器伪指令 指令快速查找 ARM 指令格式

    ARM与嵌入式系统——uCOS中文书

    这些例子曾经用Borland C/C++ 编译器(V3.1)编译过,用...用户只需要简单地编译、链接和执行。其次,使用Borland C/C++产生的80186的目标代码(实模式,在大模式下编译)与所有Intel、AMD、Cyrix公司的80x86 CPU兼容。

Global site tag (gtag.js) - Google Analytics