当谈论ARM架构时,至少该谈点什么?

来源:互联网 发布:os x软件推荐 编辑:程序博客网 时间:2024/05/19 16:37
我认为以下几点应该被谈到。

1、RISC
2、ARM指令和Thumb指令,ARM状态和Thumb状态
3、处理器模式
4、寄存器
5、寻址模式
6、指令集
7、异常
8、存储器系统
接下来,具体谈谈。

1、RISC

RISC(精简指令集计算机)是相对于CISC(负载指令集计算机)而来的。根据统计,在计算机程序运行时,有20%的指令被反复使用,约占整个程序的80%,而80%的指令用使用很少,占整个程序的80%,这就是所谓的2-8定律。
使用RISC结果的好处如下:
a large uniform register file(提供31个通用的32位寄存器,而且在任何时候,都有16个是可见的,后面在寄存器处会详细讲解)
a load/store architecture, where data-processing operations only operate on register contents, not directly on memory contents(数据处理的指令只能对寄存器的内容操作。加载和存储的不同是什么?加载是从内存到寄存器,存储是从寄存器到内存。)
simple addressing modes, with all load/store addresses being determined from register contents and instruction fields only(只用加载/存储指令可以访问存储器。)
uniform and fixed-length instruction fields, to simplify instruction decode.
而ARM架构CPU就是采用RISC结构。

2、ARM状态和Thumb状态

ARM体系结构v4T及以上版本定义了Thumb指令集。Thumb指令集是16位指令集,其功能是32位ARM指令集的功能子集。
使用ARM指令集时为ARM状态,使用Thumb指令集时为Thumb状态。

3、处理器模式

ARM体系支持7种模式,每种模式能够访问的寄存器是不同的。
表1为7种处理模式概述:
表1:处理器模式


其中Mode number是每种模式相应的寄存器设置值。

4、寄存器

上面谈到7种不同的处理器模式,在不同的处理器模式下,可以访问的寄存器不同。
ARM架构处理器有37个32位的寄存器,其中31个一般功能寄存器,包括程序计数器。
6个32位的状态寄存器,根据不同处理器模式使用不同的状态寄存器。表2为寄存器的部署情况。
表2:ARM寄存器部署

关于37个寄存器的具体:
8(未分组寄存器:R0-R7,共8个)+5(分组寄存器R8-R14,其中FIQ模式下有单独的一组R8-R12共5个
+5(另外6种模式共用一组R8-R12,共5个)+2(USR和SYS模式共用一组R13-R14,共2个)+10(另外5种模式下各有独自的一组R13-R14,共10个)+1(程序计数器PC即R15寄存器,共1个)+6(状态寄存器CPSR,和5个备份状态寄存器SPSR,共6个

同表3中可以更为具体的看出各处理器可访问的寄存器。
表3

在37个寄存器中包括通用寄存器+程序状态寄存器
其中通用寄存器包括:
1、不分组寄存器R0-R7
2、分组寄存器 R8-R14
3、程序计数器R15
程序状态寄存器包括:
CPSR(当前程序状态寄存器)+SPSR(程序状态保存寄存器),在进入异常状态是先将CPSR的数据保存到SPSR中,将PC的值保存到R14中。
表4为CPSR和SPSR的结构:
表4

其中的M[4:0]控制处理器的模式,控制结果参考表3.

Thumb状态下寄存器集是ARM状态下寄存器集的子集,可以直接访问8个通用寄存器(R0-R7),PC,SP,LP和CPSR,每一种特权模式都有一组SP,LP和SPSR。如表5所示:

ARM状态与Thumb状态下的对应关系如表6

在Thumb状态下,高位寄存器访问受限,但可以用来作为快速暂存存储器。

5、寻址模式

5.1 立即数寻址 (操作数就是立即数本身,最快)
5.2 寄存器寻址
5.3 寄存器间接寻址(用到间接,联想C语言里面的指针)
5.4寄存器基址变址寻址(其实寄存器间接寻址,就是基址变址中的变址为0)
5.5寄存器偏移寻址
5.6多寄存器寻址
5.7相对寻址
5.8堆栈寻址
5.9块拷贝寻址
这里推荐两篇博文
1.ARM汇编之寻址方式
2.ARM寻址方式

6、指令集

包括ARM指令集和Thumb指令集,这部分了解即可,平时使用C编写程序较多。
其中ARM指令主要包括
1存储器访问指令
2数据处理指令
3分支指令
以及协处理指令,杂项指令和伪指令。
Thumb指令与ARM指令有不同点,比如没有协处理器指令,信号量指令以及访问CPSR或SPSR指令。

7、异常

异常:由内部或者外部源产生以引起处理器处理一个事件。ARM支持7类异常,当异常发生时,强制从异常类型对应的异常向量处开始执行。
ARM的7类异常如表7
表7


下面看一个复位异常发生是的代码


当异常发生时,R14和SPSR用于保存当前状态,然后进入管理模式,然后设置CPSR相关状态位,然后从复位向量地址开始执行,参考表7,可以查阅各种异常的异常向量。
总结
异常发生时进入的处理过程:
1、将下一条指令的地址保存到相应的LR寄存器中;
2、将CPRS复制到相应的SPSR中;
3、迫使CPSR模式为设置成取决于异常的值
4、迫使PC从相关的异常向量中取下一条指令
总结异常发生时退出的处理过程:
1、将LR寄存器的值减去相应的偏移量,送到PC中;
2、将SPSR复制回CPSR中;

8、存储器系统

表8为ARM架构存储器等级图



下面看一下Cortex-M3内核的存储器系统





给出几个参考图
M3内核的参考架构 图1
M3总线架构参考 图2
应用架构(CC3200,M4架构(Cortex-M3和M4相比,M4有浮点数运算单元和SIMD指令(DSP)(可以加快一些数学运算的速度),都有功能较强的中断控制器))图3
图1
图2


图3

可以发现,接入内核的主要是内核 I 总线(指令总线)、D 总线(数据总线)和 S 总线(外设和SRAM)
此处可参考博文:深入理解STM32之储存器和总线架构1(基于STM32F411)
参考:
1、ARM嵌入式处理器结构与应用基础 马忠梅
2ARM Architecture Reference Manual
3、Cortex-M3权威指南 宋岩
4.http://www.cnblogs.com/laojie4321/archive/2012/04/05/2432372.html
5、http://blog.csdn.net/tigerjibo/article/details/6050649

阅读全文
1 0
原创粉丝点击