ARM架构基本知识

1.ARM架构的诞生

1974年IBM提出了精简指令集计算机 (Reduced Instruction Set Computer )旨在通过减少指令的数量和简化指令的格式来提高CPU的指令执行效率。典型的代表有ARM处理器,MIPS处理器和DECAlpha处理器等。以ARM处理器为例子,1985年Acorn推出了基于ARMv1指令集的第一代ARM1处理器,2011年推出的ARMv8将指令集扩展到64位,称为AArch64,继承自ARMv7的指令集称为AArch32。在Linux发行版中,将AArch64称为aarch64,AArch32称为arm。由于RISC较高的执行效率以及较低的资源消耗。当前包括IOS,Android在内的大多数移动操作系统核嵌入式系统都运行在这类处理器上。

长期以来,CISC和RISC都处于你追我赶的竞争中,同时也在不断地相互借鉴对方的优点。从Intel P6系列处理器开始,CISC指令在解码阶段向RISC指令转化。将后端流水线转换成类似RISC的形式,即等长的微操作,弥补了CISC流水线实现上的劣势。同期,ARMv4也引入了代码密度更高的Thumb指令集,允许混合使用16位指令和32位指令,力图提高指令缓存的效率。可以说CISC和RISC在指令集架构层面的差异已经越来越小了。

2.Thumb 与 ARM

2.1什么是Thumb

Thumb指令集是16bit指令集,是为了兼容数据总线宽度为16位的应用系统,Arm体系结构除了支持执行效率很高的32位Arm指令集以外,同时也支持16位的Thumb指令集。可以说Thumb是Arm指令集的一个子集,允许指令编码为16位的长度。与等价的32位代码相比较,Thumb指令集在保留32位代码的优势的同时,又大大节省了空间。

2.2Thumb指令集的由来

Thumb指令集是从ARMv4t之后的ARM处理器有的指令集。是一种16bit指令模式,叫做Thumb。它可以看做是ARM指令压缩形式的子集,它是为减少代码量而提出的,具有16bit的代码密度。

Thumb指令集并不完整,只支持通用功能,必要时仍然需要ARM指令。比如进入异常。

2.3Thumb的特点

  1. Thumb代码所需要的存储空间为ARM代码的60%-70%,毕竟指令短,那么占用的空间自然就少。
  2. Thumb代码使用的指令数比ARM代码多30%-40%
  3. 若使用32位的存储器,那么ARM代码比Thumb代码快40%
  4. 若使用16位的存储器,Thumb则比ARM代码快40%-50%
  5. 与ARM代码比较,使用Thumb代码,存储器的功耗会降低30%