ARM架构基本理论
一、ARM的简介
ARM(Advanced RISC Machine)是一种基于RISC(Reduced Instruction Set Computing)架构的计算机处理器架构,由ARM Holdings(ARM公司)开发和授权给其他公司生产和销售。
ARM架构最初是为低功耗、高效能的嵌入式系统设计的,如智能手机、平板电脑、数字电视、路由器、音频设备、控制器等。随着技术的发展,ARM处理器也逐渐应用于更多的领域,如服务器、超级计算机等。
ARM处理器具有低功耗、高效能、可扩展性、可靠性等优点,因此得到了广泛的应用。目前,ARM处理器已经成为移动设备和嵌入式系统中最常用的处理器架构之一,也是全球最流行的处理器架构之一。
处理器的指令架构分为:
- CISC(Complex Instruction Set Computer):复杂指令集,CISC CPU 包含有丰富的单元电路,因而功能强、面积大、功耗大。具有大量的指令和寻址方式,各种指令的使用频率相差悬殊其中80%的程序只使用20%的指令,大多数程序只使用少量的指令就能够运行。因此人们对于指令系统进行了简化,将复杂的指令用简单的指令组合使用,于是就形成RISC指令集。
- RISC(Reduced Instruction Set Computer):精简指令集,选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现,只有Load/Store(取数/存数)指令访存,其余指令的操作都在寄存器之间进行。特别重视编译优化工作,以减少程序执行时间。从指令系统兼容性看,CISC大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充。但RISC简化了指令系统,指令条数少,格式也不同于老机器,因此大多数RISC机不能与老机器兼容。
例如:有N条指令,每条指令运行的时间为T,而CISC指令的运行时间为T1=N*T,而RISC指令可以将一条指令分解成3条指令(取指令、译码、执行)。,每条指令的时间是T/3,则T2=(N+2)/3*T
二、ARM技术
1、ARM的基本数据类型
ARM采用32位架构,ARM的基本数据类型有以下3种。
Byte:字节,8bit。
Halfword:半字,16bit(半字必须与2字节边界对齐)。
Word:字,32bit(字必须与4字节边界对齐)。
字边界对齐是以0,4,8…为首地址,即首地址的低2位必须0 (0000、0100、1000、1100)。
半字边界对齐是以0,2,4…为首地址,即首地址的低1位必须0 (0000、0010、0100、0110)。
2、处理器的两种工作状态
ARM状态:32位,ARM状态执行字对齐的32位ARM指令。
Thumb状态,16位,执行半字对齐的16位指令。
用Bx Rm指令来进行两种状态的切换:
其中Bx是跳转指令,而Rm是寄存器(1个字,32位),如果Rn的位为1,则进入Thumb状态;如果Rn的位为0,这进入ARM状态。(原 因:ARM指令的后两位始终为0,没有用,而Thumb指令的后一位始终为0,没有用,因此采用位0来表示ARM指令与Thumb指令的切换标志位。)
ARM指令集和THUMB指令集的关系:
THUMB指令集是ARM指令集的子集,所有的Thumb指令都有相对应的ARM指令。Thumb的体系结构还不是很完整,所以不能要求处理器,只支持Thumb代码,却不支持ARM指令集。Thumb代码对通用功能支持较好,对于一些非通用功能,则可以借用ARM指令集。所以应用程序可以混合使用ARM指令和Thumb程序,以达到提升性能和代码密度的目的。同时可以降低功耗、节约成本。
3、ARM处理器的两种存储格式
ARM体系结构可以用两种方法存储数据字,称之为大端模式(Big-Endian)和小端模式 (Little-Endian)。
(1)大端模式:在这种模式中,32位数据字的高字节存储在低地址中,而数据字的低字节则存放在高地址中。
(2)小端模式:与大端模式存储数据完全不同,在小端模式下,32位数据字的高字节存放在高地址,而低字节存放在低地址。
通常习惯使用小端模式。
4、ARM处理器的工作模式
5、31个通用寄存器
R13(SP):指向堆栈,保护中断程序。
R14(LR):链接寄存器,返回地址。
R15(PC):程序计数器,指向下一条执行指令的地址。
CPSR:状态寄存器。
发生中断的程序跳转:
6、状态寄存器
(1)条件码标志
N、Z、C、V,最高4位称为条件码标志。ARM的大多数指令可以条件执行的,即通过检测这些条件码标志来决定程序指令如何执行。
N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。
Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。
C:对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。 对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。对于有移位操作的非法指令,C为移位操作中最后移出位的值。对于其他指令,C通常不变。
V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。
(2)控制位
I:为1时,IRQ中断禁止,清零时中断允许。
F:为1时,FIQ中断禁止,清零时中断允许。