从ARM的发展史开始学ARM

起源

第一个ARM处理器是1983年10月-1985年4月间在英国剑桥的Acorn Computer公司开发的。那时候ARM代表Acon RISC Machine公司,并一直持续到Advanced RISC Machinelimited(ARM Limited)在1990年成立之前。

Aconn因为BBC(英国广播公司)微型计算机的成功而在英国个人计算机市场占据了强有力的位置。BBC微型计算机是以8位6502微处理器为核心的机器。

随着BBC在1982年1月一系列电视节日的介绍,它迅速成为英国学校的主流机器。它还在计算
机爱好者的市场上享有热烈的支持,并找到了进人–些研究性实验室和高等教育组织的途径。
随着BBC微机的成功,Acorn的工程师考虑用不同的微处理器去构造另一种机器。他们发现所有的商业供货均不充足。1983年可得到的16位CISC微处理器比标准的存储器部件还慢。它们也有一些多时钟周期完成的指令(在一些情况下,需要数百个时钟周期),使其有很长的中断等待时间。BBC微机很大程度上得益于6502的快速中断响应。因此,Acorn的设计者不愿意接受处理器性能方面的退步。
由于在商业微处理器的供货方面遭受的这些挫折,专有微处理器的设计被提到议
事日程。主要的障碍是Acorn小组知道商业微处理器需要花费数百个人年的设计努力。Acorn不可能指望这样规模的投资,因为它是一个总共仅有400多雇员的公司。他们必须用少量的设计成本生户出比较好的产品,而且除了为BBC微机设计过少量的小规模门阵列之外它们在全定制芯片设计方面没有任何经验。
在这明显不可能的情况下,伯克利RISCI的论文带来一线生机。它是由少数研究生在一年内设计完成的处理器,品质与领先的商业货源不相上下。它的结构简单,因而
没有复杂的指令来损害中断执行时间。还有。些支持的论据,认为它能指引未来的道
路,虽然技术的优点不论怎样得到学术界的支持也不能保证商业的成功。
ARM由于各种因素的偶然组合而诞生,成为Acorn产品线的核心部分。后来,在明智地将缩写字ARM的意义修改为Advanced RISC Machine以后,它把它的名字借给新组成的公司去在Acorn的产品范围之外扩展市场。尽管名称变化了,体系结构仍保持同原Acorn的设计相近。

ARM芯片的发展历史

ARM发家史,一家无名公司的逆袭

ARM芯片的命名

ARM的芯片有几种版本号

  • ARM内核版本号
  • ARM SoC的版本号
  • 芯片的型号

ARM架构寄存器介绍

32位

32位的ARM有16个寄存器(不包含标志位寄存器),通常R0~R10都是通用寄存器,而其他的寄存器都是有特定功能的寄存器,相比之下X86只有9个寄存器

  1. R0~R3用作传递参数的,如果参数大于4个就用栈来传递,在X86架构下的传递参数是通过栈来完成的,在X86-64下才用6个寄存器来传递参数,R0是函数的返回值,和RAX差不多
  2. R4~R11是保持局部变量的寄存器,也就是说子程序在运行期间若要使用这些寄存器在进入的时候要保存这类寄存器的值,R7存放了系统调用号,R11是BP
  3. R12是过程调用中间临时寄存器,叫做IP,R13是SP(栈指针),R14是连接寄存器,叫做LR,保持子程序的返回地址,R15就是程序计数器(PC),存储当前指令的地址加8(两个ARM指令),在Thumb(v1)状态下存储当前指令的地址加4(两个Thumb指令)。这与x86不同,x86中PC始终指向要执行的下一条指令

和X86相比,有几点不同之处:

  1. 32位就已经开始用寄存器传递参数
  2. 有专门的寄存器是存储系统调用号的
  3. 多了两个关于子程序的寄存器R12和R14

64位

和32位大差不差,就是把R换成了X,位数翻倍并加多了一些寄存器

ARM汇编指令

ARM特色

指令定长

Thumb

Thumb是ARM的另一个指令集,也就是说ARM和Intel的指令集不同,它有两套指令集,一个是前面说的Thumb,另一个就是传统的ARM指令集,它们两个不同的地方就在于指令的长度不同,Thumb 指令每条 16 位长,并有相应的 32 位 ARM 指令,而传统的ARM都是32位的,所以Thumb是2字节的指令,传统的ARM是四字节的,需要注意的是当标志位寄存器当中的第5位为1时是Thumb模式

ARM程序状态寄存器

介绍 ARM 中的thumb

它为啥需要两个指令集呀?在这就要引入一个概念**”代码密度”**,我们都知道ARM架构千好万好,其本质还是RISC决定的,但是它有一个很要命的缺点,就是和CISC相比RISC的代码密度低,其代码密度低是指令定长的缘故,代码密度低会导致任何时候只有少部分指令被加载进Cache,这就意味着Cache的命中率大幅度降低,这时候CPU的工作效率就会明显减弱,与此同时功耗也会增加,最初解决这个问题的方法也很简单,就是增加它的带宽,但有个更好的办法就是Thumb,Thumb指令集是传统ARM指令集的压缩版,但它还是有保留一下传统ARM指令集的指令,并加入动态解压缩软件,使得代码密度的问题得到了解决