ARM体系结构综述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一编ARM编程模式
1. Thumb指令集是ARM指令集的重编码的子集,相较于ARM指令集,Thumb指令集有两个不足:
1)Thumb的代码执行相同的任务需要相较ARM代码更多的指令数,故不适合一些要求最大化执行时间效率的程序;
2)Thumb中不包含一些异常处理需要使用的代码,故不适用编写一些高层次的异常处理代码
2. ARM是一个RISC(精简指令集计算机),包含以下一些特性:
1) 一个大型统一的寄存器表
2) load/store结构,即所有数据操作都仅基于寄存器,而非直接基于内存;
3) 简单寻址模式,即所有load/store寻址仅依靠寄存器内容和指令域决定;
4) 统一和定长的指令格式,简化了指令的解码。
3. ARM有七种处理器模式,分别为:User(用户模式,即正常指令执行模式),FIQ(快速中断模式),IRQ(通用中断处理模式),Supervisor(超级用户模式,即操作系统保护模式),Abort(中止模式,实现内存或虚拟内存的保护),Undefined(未定义模式),System(系统模式,执行特权的系统进程)。模式之间的切换可以通过软件控制或外部的中断或异常引起。
4. 正常的应用程序均在User(用户模式)下运行,此时无法获取一些受限的系统资源,也不可以任意切换处理器模式,除非有异常发生。
5. 除了User外的其他六个均为特权模式,他们可以获取各类系统资源,并能实现相互切换。其中除System外的五个为异常模式。
6. ARM总计拥有37个寄存器,其中31个通用的32-bit寄存器,还有6个32-bit状态寄存器。而在任意时刻,仅有其中的16个通用寄存器是可见的。
7. ARM体系结构中可见的寄存器为R0-R15,可分成三类:未堆积(unbanked)寄存器R0-R7,堆积(banked)寄存器R8-R14和程序计数器R15。
8. R0-R7为所有模式共享,所有模式共用这8个寄存器。
9. R8-R14为堆积寄存器,其又分成两类。一类是R8-R12,分为两组,一组是FIQ模式专用,另一组是其他六种模式共用。另一类是R13和R14,分为六组,分别是User和System共用一组,其他五种异常处理器模式各保有一组R13和R14。R13和R14一般都用来做特殊的用途,其中R13为堆栈指针(SP);R14为链接寄存器,有两种特殊的功能,一种是发生子程序调用时保存子程序返回地址,另一种是异常发生时保存异常返回地址。
10. PC(R15)保存的是程序计数器,为当前指令的地址+8字节。同时,由于ARM指令是字对齐的,所以PC的最低两个位bit[0:1]一般为0。一个例外是当STR或者STM指令保存
R15时,则保存的即可能是当前指令地址+8字节,也可能是当前指令地址+12字节,至于是保存8字节的offset还是12字节的offset,则是由实现来确定的。基于这个原因,应该要尽量避免使用STR或STM指令保存R15。
11. 程序状态寄存器分成CPSR(当前程序状态寄存器)和SPSR(备份程序状态寄存器)。CPSR所有模式共用,而SPSR则是五个异常模式各有一个。
12. 程序状态寄存器中有两类信息,一类是程序控制码标志,一类是程序控制位。除此两类使用的位外其他为保留位。
13. 程序状态寄存器中的程序控制码标志主要包含有N标志(负数标志)、Z标志(零标志)、C标志(进位标志)、V标志(溢出标志)和Q标志(DSP指令溢出或饱和标志)。其中C 标志(进位标志)有四种情况:第一种是加法类指令,若产生进位则C标志置1;第二种是减法类指令,若有借位则置0,否则为1;第三种是移位指令,则C标志为被最后移出的位;最后一种是其他指令,C标志不产生变化。V标志也分成两种情况:一种是加法或减法类指
令,如果发生有符号溢出,则V标志置1;另一种是其他指令,V标志不变。
14. 程序状态寄存器中的程序控制位在CPSR或SPSR的最低八位,包含有I标志(IRQ中断使能)、F标志(FIQ中断使能)、T标志(ARM或Thumb指令选择位,T=1时是Thumb 指令模式)和M[4:0]模式位。
15. 异常是由导致处理器去处理某个事务的内部或外部的源产生的。在异常处理前的处理器状态应该被保存,这样当异常处理完毕后,系统可以回来原来的处理器状态。在同一时刻,可以有不止一个的异常产生。
16. ARM共支持七种类型的异常。当异常发生时,系统会条转到对应某类异常的固定存储地址来进行执行。这些固定的地址被称作异常向量。一般它们占据了0x00000000-0x0000001C 的地址空间(高向量模式为0xFFFF0000-0xFFFF001C),其中地址0x00000014(高向量模式为0xFFFF0014)被保留做未来扩充使用。
17. ARM支持的异常是有优先级的,其中SWI(软件中断)和未定义指令不会同时发生,故此两种异常有相同的优先级。中断优先级保证了在多个异常同时发生的情况下,系统将先进入高优先级异常的执行。
18. ARM支持两种不同的异常向量模式,即正常向量模式和高向量模式。正常向量模式的地址空间是0x00000000-0x0000001C,而高向量模式的地址空间为0xFFFF0000-0xFFFF001C。高向量模式需要硬件的支持,而ARM的CP15的Register 1的bit[13]提供了对正常向量模式和高向量模式的配置。
19. ARM支持的内存模式有大端和小端两种。小端是指对齐位置的字节是对应的字节中的最小有效字节。
而大端是指对齐位置的字节是对应的字节中的最大有效字节。
大小端的设置可通过配置CP15的Register 1的bit[7]来实现。
20. ARM架构中要求指令和数据对齐,即ARM指令的地址最低两位bit[1:0]均为0(Thumb 指令bit[1]为0),而取32位数据时最低两位也应对齐。如果出现非对齐,则可能的情况有非对齐指令预取和非对齐数据获取。非对齐指令预取即R15中的地址是一个非对齐的地址,如果出现此情况,可能导致两种结果,一个是出现不可预测的情况,另一个则是忽略最低位