关闭

ARM裸机程序开发——ARM运行模式及寄存器

标签: arm运行模式 寄存器
301人阅读 评论(0) 收藏 举报
分类:

现在来总结一下ARM的运行模式以及寄存器

★ARM的运行模式类型

ARM微处理器有7中运行模式:用户模式(user)、系统模式(system)、一般中断模式(IRQ)、快速中断模式(FIQ)、管理模式(supervisor、svr)、中止模式(abort)、未定义指令中止模式(undefined)

◇这七种运行模式分别用于什么情况下?

▲用户模式:用户模式是用户程序的工作模式,它运行在操作系统的用户态,没有权限去操作硬件资源,只用执行处理自己的数据,也不能切换到其他的模式。如果想要访问硬件资源只能靠两种办法:产生异常或者软中断

▲系统模式:系统模式是特权模式,不受用户模式的限制。用户模式跟系统模式共用一套寄存器。操作系统在该模式下可以访问用户模式的寄存器,操作系统的一些特权任务也可以使用这个模式访问一些受控的资源。

▲一般中断模式:又叫做普通中断模式,用于一般的中断请求,通常在硬件产生中断后进入该模式,该模式可以自由访问硬件资源

▲快速中断模式:相对于一般中断模式,用于处理紧急的中断请求,主要用于高速数据传输及通道处理中

▲管理模式:CPU上电后,默认会进入到这个模式,用来做系统的一些初始化工作,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式

▲中止模式:用于虚拟内存以及存储器的保护,当用户程序访问非法地址或者没有权限读取的地址时,会进入该模式。在Linux编程中,经常会出现segment fault一般都是在该模式下抛出的返回

▲未定义模式

用于支出硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别的指令操作时,就会进入未定义模式

◇他们的关系图

◇这几种模式具体是如何切换的?(阅读Bootloader源代码)

★ARM寄存器

ARM中共有37个寄存器,但是不能在任何模式下都可以使用,它与工作模式有关系。不同的工作模式会使用不同的寄存器组。

◇通用寄存器

通用寄存器可分为不分组寄存器(R0-R7)和分组寄存器(R8-R14)和程序计数器(R15)

◇不分组寄存器(R0-R7)

不分组寄存器工作在所用的模式下,并且没有隐含的功能

◇分组寄存器(R8-R14)

分组寄存器(R8-R14)则取决于当前的处理器工作模式,每种工作模式都有专用的分组寄存器。寄存器R8-R12可以分为2组物理寄存器。一组用于FIQ模式,另一组用于除FIQ之外的其他模式。寄存器R13-R14可分为6个分组的物理寄存器。1个用于用户模式和系统模式,其他5个分别用于svc,abt,und,irq和fiq这5个异常模式。访问时需要指定他们的模式。R13_svc,R13_abt等等

▲什么是分组寄存器?

分组寄存器在CPU不同的工作模式下所指向的物理寄存器是不同的。例如:对于分组寄存器R8-R12来说,它指向两组不同的物理寄存器。FIQ模式用一组,其他模式使用另外一组。那么在FIQ模式和其他几个模式下,虽然都是使用R8-R12这几个寄存器,但是它们却是使用了不相同的物理寄存器。


▲分组寄存器有什么作用?(或者说为什么会出现分组寄存器呢)

就使用R8-R12这几个分组寄存器。都知道这几个寄存器分为2组,其中FIQ模式使用一组,假设为A组,其他的工作模式使用另一组,假设为B组。那么当CPU运行在用户模式的时候,使用的是B组寄存器。这是突然产生一个快速中断,CPU转换为FIQ模式,然后处理中断。而快速中断模式一般使用来处理比较紧急的中断,主要用于高速的数据传输及通道处理,因此FIQ模式下处理的中断一般都是体现处理速度要非常快。如果FIQ模式与USER模式使用同一组寄存器,就会出现这样的情况,首先要将USER模式下这组寄存器的值保存下来,然后才能处理FIQ模式的中断,最后在将USER模式下的寄存器值还原,这样就会减慢了速度。而使用两组寄存器则可以解决这个问题。

◇程序计数器(R15)

寄存器R15被用作程序计数器

◇状态寄存器CPSR


▲条件代码标志位


▲保留位

▲控制位

△中断禁止位

I = 1 禁止IRQ中断

F = 1 禁止FIQ中断

△T位

该位反应了运行着的状态

T = 1执行在Thumb状态

T = 0 执行在ARM状态

△模式位

决定了CPU的工作模式

 

◇程序状态保存寄存器SPSR

   

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:158454次
    • 积分:3038
    • 等级:
    • 排名:第11493名
    • 原创:123篇
    • 转载:95篇
    • 译文:0篇
    • 评论:23条
    博客专栏
    英文网站