ARM基础知识(6.16)
来源:互联网 发布:非淘宝订单用电子面单 编辑:程序博客网 时间:2024/04/29 04:16
一 ARM工作模式
u(usr) s(sys) a(abt) u(udf) f(fiq) i(irq) s(svc) m(mon)
非特权模式:usr模式
特权模式 :除了usr模式
异常模式 :abt,udf,fiq,irq,svc
安全监控 :mon
特权模式特点:它可以访问ARM核内部受限制的资源,也可以自由切换到其他模式
二 ARM寄存器资源
(1)r0-r12 : 普通寄存器,可以当做c语言变量一样使用
(2)r13(sp) : 栈指针寄存器,它用来指定压栈的数据存放的地址
(3)r14(lr) : 在代码跳转的时候,用来记录pc的值,便于返回[lr->pc]
(4)r15(pc) : 程序计数器,它是告诉ARM核需要取的指令所在的地址
(6)CPSR : 程序状态寄存器,它反映当前ARM核的状态
7 6 5 4 0
--------------------------------------------------------------
N Z C V | .... | I F T | mode
--------------------------------------------------------------
mode : 当前所在的模式
T : 1->thumb状态 0->arm状态
F : 0->enable 1->disable
I : 0->enable 1->disable
N : 当前计算的结果为负数,则置1
Z : 当前计算的结果为0,则置1
C : 相加产生进位则置1,相减没有产生借位则置1
V : 符号位溢出(两个正数相加的结果为负数),则置1
(6)SPSR : 当异常产生的时候,保存CPSR的值,便于恢复现场
(7)所有模式共用的寄存器:r0-r7,pc,cpsr 8 + 1 + 1 = 10
(8)对于r8-r12,FIQ模式私有,其他模式共享 5 + 5 = 10
(9)r13,14 用户模式和系统模式共享,其他模式私有 2 + 5 x 2 = 12
(10)SPSR 异常模式拥有 5 = 5
(11)MON 模式有私有的r13,r14,spsr
注意:共享的寄存器的在使用的时候,需要先保存它原有的数据,在使用,使用完恢复他原有的数据
三 ARM核的异常处理
1.异常产生的时候,ARM核自己做的事情
[1]保存CPSR到异常模式的spsr
[2]设置CPSR相应位
<1>进入ARM状态
<2>进入相应的异常模式
<3>禁用相应的中断(可选)
[3]保存pc到异常模式的lr
[4]将pc指向对应的异常向量
2.程序需要做的事情
[1]编写异常向量表(一块内存,放了一些跳转指令)
[2]告诉ARM核异常向量表所在的位置
<1>ARM7/ARM9/ARM11 异常向量表可以存放在:0x0000 0000 或 0xffff 0000
<2>cortex-A系列,异常向量表可以存放在任意位置,它有协处理器cp15的c12寄存器决定
注意:ARM核从0x0000 0000地址寻找异常向量表
[3]编写异常处理函数
注意:
异常处理函数应该做的事情
[1]保存共用的寄存器的值
[2]做异常处理的事情
[3]返回:恢复现场
<1>恢复保存的寄存器的值
<2>将异常模式的lr寄存器值赋值给pc
<3>将异常模式的spsr赋值给cpsr
u(usr) s(sys) a(abt) u(udf) f(fiq) i(irq) s(svc) m(mon)
非特权模式:usr模式
特权模式 :除了usr模式
异常模式 :abt,udf,fiq,irq,svc
安全监控 :mon
特权模式特点:它可以访问ARM核内部受限制的资源,也可以自由切换到其他模式
二 ARM寄存器资源
(1)r0-r12 : 普通寄存器,可以当做c语言变量一样使用
(2)r13(sp) : 栈指针寄存器,它用来指定压栈的数据存放的地址
(3)r14(lr) : 在代码跳转的时候,用来记录pc的值,便于返回[lr->pc]
(4)r15(pc) : 程序计数器,它是告诉ARM核需要取的指令所在的地址
(6)CPSR : 程序状态寄存器,它反映当前ARM核的状态
7 6 5 4 0
--------------------------------------------------------------
N Z C V | .... | I F T | mode
--------------------------------------------------------------
mode : 当前所在的模式
T : 1->thumb状态 0->arm状态
F : 0->enable 1->disable
I : 0->enable 1->disable
N : 当前计算的结果为负数,则置1
Z : 当前计算的结果为0,则置1
C : 相加产生进位则置1,相减没有产生借位则置1
V : 符号位溢出(两个正数相加的结果为负数),则置1
(6)SPSR : 当异常产生的时候,保存CPSR的值,便于恢复现场
(7)所有模式共用的寄存器:r0-r7,pc,cpsr 8 + 1 + 1 = 10
(8)对于r8-r12,FIQ模式私有,其他模式共享 5 + 5 = 10
(9)r13,14 用户模式和系统模式共享,其他模式私有 2 + 5 x 2 = 12
(10)SPSR 异常模式拥有 5 = 5
(11)MON 模式有私有的r13,r14,spsr
注意:共享的寄存器的在使用的时候,需要先保存它原有的数据,在使用,使用完恢复他原有的数据
三 ARM核的异常处理
1.异常产生的时候,ARM核自己做的事情
[1]保存CPSR到异常模式的spsr
[2]设置CPSR相应位
<1>进入ARM状态
<2>进入相应的异常模式
<3>禁用相应的中断(可选)
[3]保存pc到异常模式的lr
[4]将pc指向对应的异常向量
2.程序需要做的事情
[1]编写异常向量表(一块内存,放了一些跳转指令)
[2]告诉ARM核异常向量表所在的位置
<1>ARM7/ARM9/ARM11 异常向量表可以存放在:0x0000 0000 或 0xffff 0000
<2>cortex-A系列,异常向量表可以存放在任意位置,它有协处理器cp15的c12寄存器决定
注意:ARM核从0x0000 0000地址寻找异常向量表
[3]编写异常处理函数
注意:
异常处理函数应该做的事情
[1]保存共用的寄存器的值
[2]做异常处理的事情
[3]返回:恢复现场
<1>恢复保存的寄存器的值
<2>将异常模式的lr寄存器值赋值给pc
<3>将异常模式的spsr赋值给cpsr
0 0
- ARM基础知识(6.16)
- ARM基础知识(一)
- ARM基础知识(一)
- ARM基础知识教程(一):ARM简介
- ARM基础知识教程(一):ARM简介
- ARM Neon基础知识(二)
- ARM基础知识
- ARM基础知识
- ARM基础知识
- ARM基础知识
- ARM基础知识教程(二):ARM处理器的寄存器
- ARM基础知识教程(四):ARM存储系统概述
- ARM基础知识教程(六): ARM映像文件
- ARM基础知识教程(二):ARM处理器的寄存器
- ARM基础知识教程(二):ARM处理器的寄存器
- ARM基础知识连载之五(转贴)
- 【ARM基础知识】ARM寻址方式
- ARM开发板基础知识
- 自学STM32---GPIO
- java学习02--变量
- 计算机系统
- 浅谈Docker隔离性和安全性
- 数学之杨辉三角
- ARM基础知识(6.16)
- iOS刷新某个cell时候crash
- 数组-08. 字符串转换成十进制整数(15)
- css制作旋转的正方体
- 新浪微博OAuth2.0授权遇到的问题
- 欢迎使用CSDN-markdown编辑器
- 动态规划三部曲之一个故事教你透彻理解动态规划(一)
- 2.用户程序代码分析
- ARM指令集