arm工作模式
来源:互联网 发布:a标签执行js后跳转 编辑:程序博客网 时间:2024/05/29 02:54
原文:http://www.cnblogs.com/zzx1045917067/archive/2012/11/26/2789736.html
说明:本文在原文基础上略作改动。
一、基本概念
Arm体系结构将存储器看做是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字(32位)数据,从第四个字节到第七个字节放置第二个存储的字数据,一次排列。
作为32位的微处理器,arm体系结构所支持的最大寻址空间为4GB。
Arm微处理器有两种工作状态,一种是arm,一种是thumb.
其中ARM状态处理器执行32位的字对齐的ARM指令;thumb状态:处理器执行16位的、半字对齐的Thumb指令。
程序运行的过程中,可以在两种状态之间进行相应的转换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
二、七种工作模式
1、用户模式(Usr):用于正常执行程序;
2、快速中断模式(FIQ):用于高速数据传输;
3、外部中断模式(IRQ):用于通常的中断处理;
4、管理模式(svc):操作系统使用的保护模式;
5、数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储以及存储保护;
6、系统模式(sys):运行具有特权的操作系统任务;
7、未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件。
Arm的工作模式切换有两种方法:
被动切换:在arm运行的时候产生一些异常或者中断来自动进行模式切换
主动切换:通过软件改变,即软件设置寄存器来经行arm的模式切换,应为arm的工作模式都是可以通过相应寄存器的赋值来切换的。
除用户模式外,其余6种工作模式都属于特权模式;大多数程序运行于用户模式;当处理器运行在用户模式下,某些被保护的系统资源是不能被访问的。
特权模式中除了系统模式以外的其余5种模式称为异常模式;
进入特权模式是为了处理中断、异常、或者访问被保护的系统资源;
三、寄存器
1) 37个寄存器
ARM有31个通用的32位寄存器加6个程序状态寄存器。有些寄存器为所有工作模式共用,还有一些专属于某一种工作模式。
R13——栈指针寄存器,用于保存堆栈指针;
R14——程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15的备份,而当发生中断或异常时,R14保存R15的返回值;
R15——程序计数器;
快速中断模式有7个备份寄存器R8—R14,这使得进入快速中断模式执行很大部分程序时,甚至不需要保存任何寄存器;
其它特权模式都含有两个独立的寄存器副本R13、R14,这样可以令每个模式都拥有自己的堆栈指针和连接寄存器;
2)当前程序状态寄存器(CPSR)
CPSR中各位意义如下:
T位:1——CPU处于Thumb状态, 0——CPU处于ARM状态;
I、F(中断禁止位): 1——禁止中断, 0——中断使能;
工作模式位:可以改变这些位,进行模式切换;
3)程序状态保存寄存器(SPSR)当切换进入某一个特权模式时,SPSR保存前一个工作模式的CPSR值,这样,当返回前一个工作模式时,可以将SPSR的值恢复到CPSR中;
四、模式切换
当异常发生,CPU进入相应的异常模式时,以下工作是由CPU自动完成的:
1、在异常模式的R14中保存前一工作模式的下一条即将执行的指令地址;
2、将CPSR的值复制到异常模式的SPSR中;
3、将CPSR的工作模式设为该异常模式对应的工作模式;
4、令PC值等于这个异常模式在异常向量表中的地址,即跳转去执行异常向量表中的相应指令;
从异常工作模式退回到之前的工作模式时,需要由软件来完成以下工作:
1、将异常模式的R14减去一个适当的值(4或8)后赋给PC寄存器;
2、将异常模式SPSR的值赋给CPSR。
- ARM处理器工作模式
- ARM处理器工作模式
- 二 ARM工作模式
- ARM工作模式
- ARM的工作模式
- ARM处理器工作模式
- ARM工作模式
- ARM工作模式
- ARM处理器工作模式
- ARM处理器工作模式
- arm工作模式
- ARM工作模式
- ARM工作模式
- 【其他】ARM工作模式
- ARM处理器工作模式
- arm工作模式
- ARM工作模式
- ARM处理器工作模式
- android计时器实现
- IOS Emoji 编码打印
- composer和git 的交互
- JPA规范:Java Persistence API 标准规范用法示例
- 同步、异步、阻塞与非阻塞
- arm工作模式
- 把一个十进制整数以二进制数形式输出,for循环实现
- iOS设计模式(代码分析系列2:简单工厂模式)
- python中创建数组
- iOS autolayout的使用
- 20160426 Android框架资源整理
- Struts的 action访问servlet API的三种方法
- C/C++复习:职工信息(结构体)
- onchange和oninput事件区别