本文参考至ARM的官方手册
ARM® Architecture Reference Manual
ARMv7-A and ARMv7-R edition
文章目录
1.ARM的基本设定
ARMv7 采用的是32位架构
- Byte: 8 bits
- Halfword: 16bits(2 byte)
- Word: 32 bits(4 byte)
ARM core提供:
- ARM指令集(32 bits)
- Thumb 指令集(16bits),thumb指令集是由于原来内存很贵,为了节省memory就用16bits方式来开发,现在已经基本不这么用了
- Thumb2 指令集(16&32bits),M系列的可能还有用thumb2模式来开发的,还是为了节约成本
2.ARM处理器的工作模式
1.有哪些模式
在官方手册上看到,有这么一些模式,但实际上有些模式是在特定情况下才能存在的,比如Monitor、Hyp模式,我们这里只选择基本工作模式来分析:
同时我们能看到有一栏是权限栏(privilege level),这些PL0、PL1、PL2的定义是:
所以我们可以总结下ARM的工作模式
2.设置这些模式的原因
设置这些模式的原因还是为了能够适配软件操作系统,因为软件操作系统提出了 userspace和kernelspace,因此硬件的设计考虑了软件的需要。
3.ARM寄存器介绍
ARMv7一共有37个寄存器,如下图所示:
user模式下一共有r0~r15加上cpsr,17个寄存器,FIQ模式下灰色部分是自己的,即r8 ~ r14和spsr寄存器是自己的,其他的是usermode的,以此类推;
1.通用寄存器
r0 ~ r12是通用寄存器,就是计算的时候会用到,没有特殊的含义
2.SP/LR/PC特殊寄存器
SP是堆栈指针寄存器,用于保护现场,存储上下文的信息
LR是返回寄存器,存储一些返回地址的信息
PC是程序运行计数器,往pc里写值,将会导致跳转到该地址
3.CPSR/SPSR寄存器
CPSR是当前程序的状态寄存器,里面存储着很多信息,包括当前的指令模式(是thumb还是arm),以及当前的处理器模式(user/fiq/…)
SPSR全程是 saved program status reg,它的目的就是作为CPSR的一份备份,那备份这个有什么用呢,文档里说了就是为了一旦异常发生,能够用到这个备份的值