一.ARM的基本数据类型
无符号数据,二进制格式存储,范围:0~(2^N)-1,N为数据类型长度;
有符号,二进制补码格式,数据范围:-2^(N-1)~2^(N-1)-1,N为数据类型长度。
ARM的体系结构将存储器看作是从0x00000000地址开始的按字节编码的线性存储结构,每个字节都有对应的地址编码。
二.浮点数据类型
浮点运算使用在ARM硬件指令集中未定义的数据类型。在协处理器指令空间定义了一系列浮点指令,这些指令全部可以通过未定义指令异常在软件中实现。
三.大/小端存储模式
Cortex-A8处理器支持大端和小端模式,同时还支持混合大小端模式和非对齐数据访问。可以通过硬件的方法设置端模式。
四.寄存器组
Cortex-A8处理器共有40个32位寄存器,33(16+7+2+2+2+2+2)个通用寄存器,7个状态寄存器。其中状态寄存器包括1个CPSR(Current Program Status Register 当前程序状态寄存器),6个SPSR(Saved Program Status Register 备份程序状态寄存器)
这些寄存器不能同时访问,在不同的寄存器工作模式下只能访问一组相应的寄存器组。
1.通用寄存器组
R0~R7是不分组的通用寄存器,R8~R15是分组的通用寄存器。在ARM状态下,任何时刻,16个数据寄存器R0~R15和1~2个状态寄存器是可访问的。在特权模式下,特定模式下的寄存器阵列才是有效的。
未分组的通用寄存器R0~R7用于保存数据和地址,在处理器模式切换时,由于使用的是相同物理存储器,可能会破坏存储器中的数据。
分组的通用寄存器R8~R15具有不用不同的处理器工作模式决定访问的物理寄存器不同的特点。
- R8~R12寄存器分别对应俩个不同的物理寄存器,分别是快速中断模式下的相应存储器和快速中断模式下的相应存储器。
- R13、R14寄存器分别对应7个不同的物理存储器,用户和系统模式下共用一个,其他六个为:fiq(快速中断)、svc(管理模式)、abt(数据访问终止模式)、irq(外部中断模式)、und(未定义指令模式)、mon(安全监控模式)。R13常作堆栈指针;R14子程序链接寄存器(LR:LinkRegister),该寄存器由ARM编译器自动使用。在执行BL和BLX指令时,R14保存返回地址。同理,当处理器进入中断和异常,或者中断和异常子程序执行BL和BLX指令时,或者当系统中发生子程序调用时,相应的R14寄存器用来保存返回地址。如果返回地址已经保存在堆栈中,则该寄存器也可以用于其他用途。
BL: 带链接的跳转。 首先将当前指令的下一条指令地址保存在LR寄存器,然后跳转的lable。通常用于调用子程序,可通过在子程序的尾部添加mov pc, lr 返回。
BX: 带状态切换的跳转。最低位为1时,切换到Thumb指令执行,为0时,解释为ARM指令执行。
FIQ模式下有7个分组寄存器映射到R8~R14,很多快速中断不需要保存任何寄存器(疑问?是因为有自己的寄存器吗)。
每个模式下,分别有指定寄存器映射到R13和R14,使得每种模式下都有自己的堆栈指针和链接寄存器。
2.状态寄存器
ARM处理器有俩类程序状态寄存器:一个当前程序状态寄存器CPSR和6个备份程序状态寄存器SPSR。主要功能:
每一种处理器模式下使用专用的备份程序状态寄存器。当特定的终端或异常发生的时候,处理器切换到对应的工作模式,该模式下的备份程序状态寄存器保存当前程序状态寄存器的内容。(例如由用户切换到外部中断,则外部中断状态寄存器存放用户模式的状态寄存器)
状态寄存器分为四个域:标志位域f,PSR[31:24];状态域s,PSR[23:16];拓展域x,PSR[15:8];控制域c,PSR[7:0]。
- N:N=1 表示运算结果为负数,N=0 表示结果为正数或者零。
- Z:Z=1 表示运算结果为零,Z=0 表示运算结果不为0。
- C:加法指令:C=1 产生进位;减法指令:C=1产生了借位;
- V:加减运算指令,当操作数和运算结果为二进制补码表示的带符号数,V=1表示符号位溢出。
Q标志位用于指示增强的DSP指令是否发生了溢出。Q标志具有粘性,当因某条指令将其设为1时,它将一直保持为1直到通过MSR指令写CPSR明确的将该位清0.
IT块用于对Thumb指令集中if-then-else这一类语句块的控制。
用于表示处理器是否处于ThumbEE状态。(T=0,J=0为ARM状态)T=1时:
【注】T=0时不能设置J为1,T=0的时候,J只能为0。不能通过MSR指令来改变CPSR的J位。
该位用于表示在SIMD指令集(一条之指令操作多个数据,而在SIMD型的CPU中,指令译码后几个执行部件同时访问内存,一次性获得所有操作数进行运算。)中大于、等于的标志,在任何模式下可读可写。
控制存取操作字节顺序,0为小端,1为大端。ARM和Thumb指令集都提供指令用于设置和清除E标志位。
程序状态寄存器的低8位是控制位,异常发生时,这些位的值将发生改变。在特权模式下,可通过软件编程来修改这些标志位的值。
- 中断屏蔽位:I=1,IRQ中断被屏蔽(外部中断);F=1,FIQ中断被屏蔽(快速中断)。
- 状态控制位:T=0,处理器处于ARM状态;T=1,处理器处于Thumb状态。
- 模式控制位:M[4:0]决定处理器的工作模式。
五.Cortex-A8存储系统
寄存器位于CPU内部,用于指令执行时的数据存放。Cache高速缓存,存正在使用的指令和数据。主存储器是程序执行代码和数据存放区,DDR2 SDRAM。辅助存储器类似PC的磁盘,嵌入式系统中通常采用Flash芯片。
1.协处理器CP15
ARM系统中实现对存储系统的管理通常使用的是协处理器CP15,ARM处理器支持16个协处理器。程序执行过程中,每个协处理器忽略属于ARM处理器和其他协处理器的指令。当一个协处理器不能执行属于它的的协处理器指令时,产生一个未定义指令异常,在该异常中断处理程序中,可以用软件模拟硬件。
CP15负责完成大部分的存储器管理,CP15有16个32bit寄存器,编号0~15。
mrc p15, 0, r0, c1, c0{, 0}; //将CP15的寄存器C1的值读到r0 mcr p15, 0, r0, c1, c0{, 0}; //将r0的值写到CP15的寄存器C1中
(2)CP15的寄存器C3(ARM16个域的访问权限)
保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器
MRC p15, 0, <Rd>, c6, c2, 0; //访问数据失效地址寄存器 MRC p15, 0, <Rd>, c6, c0, 2; //访问指令失效地址寄存器
2.内存管理单元MMU
(1)MMU让每个任务都运行在各自的虚拟存储空间。MMU完成虚拟地址到物理地址的映射。
(2)MMU提供存储器访问权限的控制,提供硬件机制的内存访问授权。
MMU利用映射,将在指令调用或数据读/写过程中使用的逻辑地址转换为物理地址。MMU还标记对非法逻辑地址逻辑地址进行的访问,这些非法逻辑地址并没有映射到任何物理地址。
对内存区域的描述一般是通过一个叫描述符的结构来说明的,该描述符可以是段描述符,也可以是页描述符或者其他内存单位的描述符。段描述符的组成结构为:
- Section base address: 段基地址,
- AP:访问控制位Access Permission,
- Domain:访问控制寄存器的索引,Domain和AP配合使用,对访问权限进行检查。
- C:当C被置为1时为write-through(写直通:每次修改都写入内存)模式。
- B:当B被置为1时为write-back(写回:页面换出的时候才写入内存)模式(C、B俩个位同一时刻只能有一个被置1)。
对某个内存区域的访问是否需要进行权限检查是由该内存区域的描述符中的Domain域决定的。而某个内存区域的访问权限是由该内存区域的描述符中的AP位和协处理器CP15中控制寄存器C1的S bit和R bit所决定的。
3.高速缓存存储器Cache