ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。ARM处理器本身是32位设计,但也配备16位Thumb指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。
ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。
1、体积小、低功耗、低成本、高性能;
2、支持Thumb(16位,2字节对齐)/ARM(32位,4字节对齐)双指令集,能很好的兼容8位/16位器件;
3、大量使用寄存器,指令执行速度更快;
4、大多数数据操作都在寄存器中完成;
5、寻址方式灵活简单,执行效率高;
6、指令长度固定。
CISC与RISC概念
1. CISC(Complex Instruction Set Computer,复杂指令集计算机)
大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的指令却不经常使用,在程序设计中只占20%。
2. RISC(Reduced Instruction Set Computer,精简指令集计算机)
优先选取使用频最高的简单指令,避免复杂指令;将指令长度固定,指令格式和寻址方式种类减少;以控制逻辑为主,不用或少用微码控制等。
特点:
(1)采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。
(2)使用单周期指令,便于流水线操作执行。
(3)大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。此外,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗:
(4)所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。
(5)可用加载/存储指令批量传输数据,以提高数据的传输效率。
(6)可在一条数据处理指令中同时完成逻辑处理和移位处理。
(7)在循环处理中使用地址的自动增减来提高运行效率。
寄存器结构
ARM处理器共有37个寄存器,包括:
(1)30个通用寄存器,均为32位的寄存器。
(2)1个程序计数器(PC指针),也为32位的寄存器。
(3)1个当前程序状态寄存器(cpsr)
(4)5个程序状态保存寄存器 (spsr)
状态寄存器是用以标识CPU的工作状态及程序的运行状态,均为32位,只使用了其中的一部分。
处理器模式
共有7种,包括:
6种特权模式:
(1)终止模式(abort):当处理器访问存储器失败时,进入该模式;
(2)中断模式(interrupt request,IRQ):对ARM普通级别的中断做出响应;
(3)快速中断模式(fast interrupt request,FIQ):对ARM较高级别的中断做出响应,它有自己的r8~r12寄存器,不需要在处理时再对这些寄存器进行压栈,所以速度较快。
(4)管理模式(supervisor,SVC):处理器复位后进入该模式,通常处于该模式的有操作系统内核;
(5)系统模式(system):特殊的用户模式,允许对cpsr的完全读写访问;
(6)未定义模式(undefined,Undef):当处理器遇到没有定义的指令或处理器不支持的指令时进入该模式;
1种非特权模式:
(1)用户模式(user):一般用来运行应用程序;
所有的模式一般都可以访问的寄存器有:
(1)r0 ~ r12
(2)r13 (stack pointer,sp)、r14(link register,lr)
(3)r15 (program counter,pc)
(4)cpsr(current program status register)
除系统模式外的其他特权模式均可访问的寄存器:
(1)spsr(saved program status register)
延伸概念
哈佛结构:采用指令集与数据集分开的设计结构,常见的有ARM7、ARM11等;
冯诺依曼结构:采用指令集与数据集混在一起取用的设计结构
Thumb:
16位指令集,为32位ARM指令集的功能子集,一般仅能访问r0~r7及3个特殊寄存器,访问r8~r12寄存器需特殊指令处理;
r0~r7,又被称为Thumb state Low registers;
r8~r12,又被称为Thumb state High registers;
ARM 异常处理相应操作:
当发生异常情况时,会进行:
(1)程序备份,将CPSR复制到SPSR;
(2)重新设置CPSR的状态位:更改ARM状态位;更改位异常模式;结束中断接收;
(3)将当前的返回地址存储到LR寄存器中;
(4)将PC指针设置指向中断或异常的入口地址;
结束中断执行后,
(5)将程序的备份从SPSR拷贝回CPSR;
(6)还原CPSR的状态位;
(7)将中断发生前指针PC指向的地址从LR中还原;
RISC(精简指令集)与CISC(复杂指令集)的区别:
(1)RISC侧重软件的处理,CISC侧重硬件的处理;
(2)RISC指令仅有少量不同格式,CISC则有大量的不同格式;
(3)RISC使用了更多的寄存器,CISC则仅用了少量寄存器;
(4) RISC仅用了少量寻址方式,CISC则有大量的寻址方式;
(5)RISC编译器更复杂,CISC则在处理器上扩展运用了微编程;
(6)RISC指令运行仅用一个周期,而CISC则要用多个周期;
(7)RISC流水线更简单,CISC流水线则较为复杂。
一些汇编指令的简写汇总:
(1)EQ,Equal,标志位为Z=1;
(2)NE,Not equal,标志位为Z=0;
(3)CS/HS,Unsigned higher or same,标志位为C=1;
(4)CC/LO,Unsigned lower,标志位为C=0;
(5)MI,Minus,标志位N=1;
(6)PL,Positive or Zero,标志位为N=0;
(7)VS,Overflow,标志位为V=1;
(8)VC,No overflow,标志位为V=0;
(9)HI,Unsigned higher,标志位为C=1&Z=0;
(10)LS,Unsigned lower or same,标志位为C=0&Z=1;
(11)GE,Great or equal,标志位为N=V;
(12)LT,Less than,标志位为N!=V;
(12)GT,Great or equal,标志位为Z=0&N=V;
(13)LE,Less than,标志位为Z=1 or N!=V;
(14)AL,Always