大家好,欢迎来到IT知识分享网。
学习ARM体系结构相关知识,首先推荐阅读ARM官方文档《ARM Architecture Reference Manual 》,本文内容也是来源于官方参考手册,以下只是我提炼总结出一些重要部分,然后加上自己一些理解。当然内容不够全面,如果想更全面具体学习了解建议还是去看一下官方文档。
ARM是什么?
ARM有两层含义:
- 公司的名称 Advanced RISC Machines
- 处理器类别
ARM公司介绍
- 成立于1990年11月,前身为 Acorn计算机公司(任天堂8位游戏机CPU)
- 主要设计ARM系列RISC处理器内核,授权ARM内核给生产和销售半导体的合作伙伴
- ARM 公司不生产芯片,提供基于ARM架构的开发设计技术
- 软件工具, 评估板, 调试工具,应用软件,总线架构, 外围设备单元,等等
ARM处理器
ARM是一家设计处理器的公司,这家公司设计的处理器统称为ARM系列处理器内核,采用用的指令集是RISC(精简指令集), 授权ARM内核给生产和销售半导体的合作伙伴,出售知识产权,ARM 公司不生产芯片。
ARM处理器特点是采用精简指令集,指令数量少,设计相对简单,能耗较低,在移动终端应用很广。
ARM体系结构主流芯片
- 高性能方向
- Samsung(三星)
- S5PV210 Cortex-A9核
- Freescale(飞思卡尔)
- i.MX512/ i.MX513/ i.MX515 Cortex-A8核
- QSD8650A/ QSD8672(Snapdragon系列)
- 低功耗、低成本的微控制器方向
- Cortext-M3
- Stm32系列
- Cortex-M1
- Cortex-M0
- 实时方向
- Cortex-R4
- 安全方向
- SecurCore
- SC200 (ARM9)
- SC100 (ARM7)
ARM编程模型(基于Cortex-A9)
ARM的数据和指令类型
ARM采用的是32位架构。
数据类型大小:
- Byte:8位
- Word:32位
- Halfword:16位
- Doubleword:64位 (cortext-A)
提供两种指令集:
- ARM指令集,32位
- Thumb指令集,16位
ARM的工作状态
Arm的工作状态可以分为两种:
- 第一种 ARM状态 ,处理器执行32位的ARM指令。.arm
- 第二种 Thumb状态,执行16位,半字对齐的Thumb指令。
存储器格式
四字节对齐
ARM体系结构地址是从零地址开始的字节线性组合。
从0地址处到3地址处存放第一个字的数据,然后从4地址处到7地址处存放第二个字的数据。
大小端
大端(big-endian):低地址处存放高位的数据
小端(little-endian):低地址处存放低位的数据
举个例子:比如 0x12345678
如何用C语言实现判断存储格式是大端还是小端?
1. #include<stdio.h>
2. #include<stdlib.h>
3. int main()
4. {
5. int i = 1;
6. (*(char *)&i == 1) ? printf("Little-endian/n") : printf("Big-end ian/n");
7.
8. return 0;
9. }
ARM处理器的工作模式
现代CPU必须具备的几个功能:
- ① 运行程序
- ② 处理中断异常
- ③ 权限管理
ARM处理器的八种工作模式,我们把这八种工作模式以CPU的功能去划分:
1.正常运行
- 用户模式(user): 正常执行程序,大部分任务处于这种模式下
- 系统模式(system):运行特权级别任务程序
- 特权模式(SVC):当复位或者软中断指令执行时进入这种模式,是一种保护 模式。
2.中断
- 快速中断模式(FIQ):高优先级(FAST)中断产生时进入这种模式,用于高速 数据传输和通道处理。
- 外部中断模式(IRQ):一个普通中断产生时进入这种模式。一般中断处理。
3.异常
- 数据访问终止模式(ABT):当存储异常时进入这种模式。用于虚拟存储和存储 保护。
- 未定义指令终止模式(UND):当执行未定义的指令时进入这种模式。
4.Monitor (Cortex -A)
- 监控模式(MON): 运行安全软件,安全模式。
注意:
- 除了user模式其它模式都属于特权模式。
- 除了用户模式系统模式之外,都属于异常模式。
ARM状态寄存器组织
如上图,Cortex-A系列CPU一共有40个32位寄存器。
什么叫做寄存器?
寄存器是软硬件接口,是存储单元。
CPU内部寄存器也是存储单元,通过寄存器地址来访问寄存器内容。
每一种CPU模式下对应有一组可以操作的寄存器。
任何模式下都有以下寄存器可以存取:
- ① R0~R12
- ② R13,the Stack Pointer,SP,栈指向,
- ③ R14,the Link Register,LR,链路寄存器
- ④ R15,the Program Pointer,PC,程序指针
- ⑤ CPSR,the Current Program Status Register,当前状态寄存器
- ⑥ 另外,特权模式(除了系统和用户模式)还有一个SPSR,the Saved Program Status Register,保存状态寄存器。
寄存器分组
- R0~R7,未分组寄存器,对于所有的CPU模式下,未分组寄存器对应的都是同一的物理寄存器。
- R8~R14,分组寄存器。可以访问的物理寄存器取决于当前CPU工作的模式。
- 对于R8~R12,有一组专门用于FIQ模式,其它模式都是使用同一组物理寄存器。
- 对于R13~R14,除了user和system模式共有物理寄存器,其它6种模式都各自有一组自己的物理寄存器。
- R13,SP,栈指向寄存器,指向栈的栈顶。
- R14,LR,链路寄存器,指向子函数返回的地址。
CPSR 程序状态寄存器
CPSR,用来保存当前程序的状态的寄存器
SPSR,程序状态保存寄存器,每一种CPU异常模式(除了system和user)下对应有一个自己的SPSR寄存器,用来在异常产生时保存CPSR寄存器的值,以便在异常之后恢复CPSR的值。所以格式和CPSR一模一样。
好,那么我们来看看CPSR/SPSR寄存器各个bit的具体含义:
组成如下:
- 28~31位,是 ALU(Arithmetic Logic Unit,算术逻辑单元)结果状态标志备份
- 0~4位, 当前的处理器模式
- 6~7位,中断使能标志位
- 第5位,设置处理器的状态
ALU结果状态标志位[31:28]:
中断禁止位:
- I = 1: 禁止 IRQ.
- F = 1: 禁止 FIQ
T 位:
- T = 1; 处理器处于 Thumb状
- T = 0; 处理器处于 ARM 状态
Mode位(M0~M4):处理器模式位
- 10000 User mode;
- 10001 FIQ mode;
- 10011 SVC mode;
- 10111 Abort mode;
- 11011 Undfined mode;
- 11111 System mode;
- 10110 Monitor mode;
- 10010 IRQ mode;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/65590.html