1.ARM汇编基础
来源:互联网 发布:新郎接亲游戏知乎 编辑:程序博客网 时间:2024/06/06 19:46
1.ARM编程模型
RSIC:精简指令集
CSIC:复杂指令集
ARM流水线:
冯诺依曼架构
取指令和取数据用一套总线
ARM7三级流水线,取值、译码、执行
哈佛架构
取指令和取数据是两套总线
ARM9五级流水线
2.ARM编程模型
2.1 工作模式
SVC(管理)模式,系统上电 执行swi指令 (内核态)
FIQ(快速中断)模式, 产生了FIQ类型异常
IRQ(中断)模式, 产生IRQ类型异常
ABORT(中止)模式,非正常的存储器访问
UNDEF(未定义)模式,用于处理未定义的指令
system(系统)模式
user(用户)模式 (用户态)
前五种统称为异常模式
前六种统称为特权模式
2.2 工作状态
ARM状态 :当执行ARM(32bit)指令
THUMB状态 : 当执行THUMB(16bit)指令
2.3 ARM寄存器组织结构
特殊功能寄存器和ARM寄存器区别:
1)存在的位置不同
ARM寄存器位于ARMcore
特殊功能寄存器位于S5PV210内
2)特殊功能寄存器都有唯一的物理地址
可以利用C语言的指针编程访问
ARM寄存器没有地址,只有名称,
通过C语言很难访问到它们
有37个32bit寄存器,
其中有31个通用寄存器,分别命名为
r0 r1 r2 r3 ... r15
约定成俗:
r13(sp, stack poniter 栈指针寄存器)
r14(lr, 保存函数的返回地址)
r15(pc, )
6个程序状态寄存器
cpsr
[4:0], 模式位,标识当前处理处于哪种工作模式
[5], T 为1时表明当前处理器工作于THUMB状态
0 ARM
[6], F FIQ屏蔽位
[7], I IRQ屏蔽位
[31:28]
N 如果运算结果为负数N被置位( 设置为1)
Z 如果运算结果为0,Z被置位
C 如果预算过程中最高位有进位C被置位
V 有符号数运算时如果有溢出会置位
5个spsr, 作为CPSR的备份寄存器
每种工作模式下只能访问37个寄存器的一个子集
2.4 ARM异常与异常向量表
ARM会产生7种异常
reset,复位异常
当按下复位键,会导致ARM进入SVC模式
undef,未定义异常
执行到不能识别的指令
会导致ARM进入undef模式
swi, 软中断异常
当执行到汇编指令 “swi n”
会导致ARM进入SVC模式
pretch abort,取指令访问了非法地址
会导致ARM进入ABORT模式
data abort, 取数据访问了非法地址
会导致ARM进入ABORT模式
IRQ, 中断异常
按键 设备收发数据完毕
会导致ARM进入IRQ模式
FIQ, 快速中断异常
会导致ARM进入FIQ模式
当异常产生时,硬件自动完成的工作:
1)自动备份CPSR 到SPSR_<mode>
2)修改CPSR
mode,
T=0,异常处理代表必须是ARM指令
F=1
I=1,屏蔽FIQ IRQ异常
3)保存返回地址到LR_<mode>
4) 设置PC为相应的入口地址
reset PC=0x00 一条ARM指令
undef PC=0x04
swi PC=0x08
pretch PC=0x0c
daabor PC=0x10
IRQ PC=0x18
FIQ PC=0x1c
当异常返回时,软件必须完成的工作
1)从SPSR_<mode>恢复CPSR
2) 从LR_<mode>恢复PC
- 1.ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- arm汇编基础一
- ARM汇编指令基础
- ARM汇编编程基础
- arm 反汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础
- ARM汇编基础知识点总结
- ARM汇编基础知识点总结
- arm汇编基础(转)
- arm汇编基础(转)
- Notepad++下Python的自动补全
- Read N Characters Given Read4
- 7 - 9月学习计划
- 前序加中序求二叉树后序序列
- RecyclerView添加头部和尾部
- 1.ARM汇编基础
- 一点思考
- 我的首篇文章
- Sqoop源码浅析
- python算法——字符串表达式的计算
- [学习笔记]实时SLAM的未来及深度学习与SLAM对比
- js调试控制台使用详解图解
- DHCP详解
- PHP与MYSQL学习笔记--基础篇1