转载自:https://blog.csdn.net/sinat_28494049/article/details/46006477
ARM指令集体系结构,从最初开发至今已有了重大改进,而且将会不断完善和发展。为了精确表达每个ARM实现中所使用的指令集,到目前ARM体系结构共定义了8个版本,以版本号v1~v8表示,各版本特点如下。
1. 版本1(v1)
该版本包括:
●基本数据处理指令(不包括乘法)。
●字节、字以及半字加载/存储指令。
●分支(branch)指令,包括用于子程序调用的分支与链接(branch-and-link)指令。
●软件中断指令,用于进行操作系统调用。
●26位地址总线。
2. 版本2(v2)
与版本1相比,版本2增加了下列指令:
●乘法和乘加指令(multiply & multiply-accumulate)。
●支持协处理器。
●原子性(atomic)加载/存储指令SWP和SWPB(稍后的版本称v2a)。
●FIQ中的两个以上的分组寄存器。
3. 版本3(v3)
版本3较以前的版本发生了大的变化,具体改进如下:
●推出32位寻址能力。
●分开的CPSR(current program status register,当前程序状态寄存器)和SPSR(saved program status register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
●增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常。
●增加了MRS指令和MSR指令,用于完成对CPSR和SPSR寄存器的读/写;修改了原来的从异常中返回的指令。
4. 版本4(v4)
版本4在版本3的基础上增加了如下内容:
●有符号、无符号的半字和有符号字节的load和store指令。
●增加了T变种,处理器可工作于Thumb状态,在该状态下,指令集是16位压缩指令集(Thumb指令集)。
●增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。
另外,在版本4中还清楚地指明了哪些指令会引起未定义指令异常。版本4不再强制要求与以前的26位地址空间兼容。
5. 版本5(v5)
与版本4相比,版本5增加或修改了下列指令:
●提高了T变种中ARM/Thumb指令混合使用的效率。
●增加了前导零计数(CLZ)指令。
●增加了BKPT(软件断点)指令。
●为支持协处理器设计提供了更多的可选择的指令。
●更加严格地定义了乘法指令对条件标志位的影响。
6. 版本6(v6)
ARM体系版本6是2001年发布的。该版本在降低耗电的同时,还强化了图形处理性能。通过追加有效多媒体处理的SIMD(single instruction multiple datastream,单指令流,多数据流)功能,将语音及图像的处理功能提高到了原机型的4倍。ARM体系版本6首先在2002年春季发布的ARM11处理器中使用。除此之外,v6还支持多微处理器内核。表2.1给出了ARM处理器核使用ARM体系结构版本的情况。
7.版本7 (v7)
ARMv7架构是在ARMv6架构的基础上诞生的。该架构采用了Thumb-2技术,Thumb-2技术是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。Thumb-2技术比纯32位代码少使用 31%的内存,减小了系统开销。同时能够提供比已有的基于Thumb技术的解决方案高出38%的性能。ARMv7架构还采用了NEON技术,将DSP和媒体处理能力提高了近4倍,并支持改良的浮点运算,满足下一代3D图形、游戏物理应用以及传统嵌入式控制应用的需求。此外,ARMv7还支持改良的运行环境,以迎合不断增加的JIT(Just In Time)和DAC(DynamicAdaptive Compilation)技术的使用。另外,ARMv7架构对于早期的ARM处理器软件也提供很好的兼容性。
ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器和低成本应用提供优化。
8.版本8(v8)
ARMv8-A 将 64 位架构支持引入 ARM 架构中,其中包括:
64 位通用寄存器、SP(堆栈指针)和 PC(程序计数器)
64 位数据处理和扩展的虚拟寻址
两种主要执行状态:
AArch64 - 64 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持
AArch32 — 32 位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持
这些执行状态支持三个主要指令集:
A32(或 ARM):32 位固定长度指令集,通过不同架构变体增强部分 32 位架构执行环境现在称为 AArch32。
T32 (Thumb) 是以 16 位固定长度指令集的形式引入的,随后在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度指令集。部分 32 位架构执行环境现在称为 AArch32。
A64:提供与 ARM 和 Thumb 指令集类似功能的 32 位固定长度指令集。随 ARMv8-A 一起引入,它是一种 AArch64 指令集。
ARM ISA 不断改进,以满足前沿应用程序开发人员日益增长的要求,同时保留了必要的向后兼容性,以保护软件开发投资。在 ARMv8-A 中,对 A32 和 T32 进行了一些增补,以保持与 A64 指令集一致。