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