ARM处理器基础
- 数据在内核各个组成部分之间是如何移动的。
- 从软件开发的角度描述ARM处理器的编程模型,从而了解内核的功能以及不同部分之间的相互作用。
- 内核扩充
- ARM 内核结构的不同版本和指令集结构的变化
- 对内核结构分类
程序员可以把ARM内核看作是由数据总线连接的各个功能单元的集合, 如下图所示:
数据通过数据总线进入处理器核,这里的数据可能是数据项或指令,该图显示了冯诺伊曼结构的ARM实现--数据和指令共享同一总线,若是哈弗结构,则使用两条总线。
与所有RISC处理器一样,ARM处理器采用load-store体系结构,这意味着它只有两种类型的指令用于把数据移入移出处理器;load指令从存储器复制数据到内核的寄存器,store 指令从寄存器复制数据到存储器,没有直接操作存储器数据的指令,因此数据处理只能在寄存器里进行。
由于 ARM 是32位,大部分指令认为寄存器中保存的是32位有符数或无符号数, 因此当从存储器读取一个数据到寄存器时,符号扩展会将8位和16位有符号数转换成32位;
典型的ARM指令通常有两个源寄存器 Rn, Rm和一个目的寄存器 Rd, 源操作数分别通过内部总线A和B从寄存器中读出,ALU(算术逻辑单元)和 MAC(乘累加单元) 通过 A, B总线得到寄存器值 Rn, Rm 并计算出一个结果后将结果Rd 写到寄存器中。
load-store 使用ALU来产生一个地址,这个地址将被保存到地址寄存器并发送到地址总线。
ARM的一个重要特性是寄存器Rm可以选择在进入ALU之前是否先经过桶形移位器预处理。桶形移位器和ALU的协作可以计算较大范围的表达式和地址。
在经过有关功能单元后,Rd寄存器里的结果通过结果总线写回到寄存器文件,对于load-store指令,在写入或读取之前,地址加法器会自动更新地址寄存器。
寄存器
通用寄存器可以保存数据和地址,它们用r为前缀加该寄存器的序号来标识。
下图列出了在用户模式(一种受限模式,通常用于执行应用程序)下的有效活动寄存器。处理器可以在7种不同的模式下运行。
最多可有18个活动寄存器,16个数据寄存器和两个处理器状态寄存器,程序员可见的数据寄存器是 r0~R15。有3个寄存器被赋予了特殊的功能:
- r13 (sp) 通常用作堆栈指针,保存当前处理器模式的堆栈栈顶。
- r14 (lr) 又称为链接寄存器,保存调用子程序的返回地址。
- r15 (pc) 程序计数器,保存处理器要取下一个指令的地址.
寄存器 R0~R13 是正交的--任何指令如果可使用r0,那么也就可以使用其他寄存器,但是有些指令是以特殊的方式来对待人r14和r15
除了16个数据寄存器,还有两个程序状态寄存器:cpsr和spsr (分别是当前和备份的程序状态寄存器)
寄存器文件包含所有程序员可利用的寄存器,哪些寄存器对程序员是可见的取决于当前的处理器模式;
当前程序状态寄存器
ARM使用 cpsr 来监视和控制内部测操作。cpsr分为4个8位区域:标志域,状态域,扩展域和控制域。扩展域和状态与目前保留,以便将来使用。控制域包含处理器模式、状态和中断屏蔽位。标志域包含条件标志位。
处理器模式
共有7种处理器模式:6种特权模式:中止模式、中断模式、快速中断模式、管理模式、系统模式、未定义模式;1种非特权模式--用户模式;模式决定了那些寄存器是活动的,以及对cpsr的访问权限。特权模式允许对cpsr完全访问,非特全模式只允许读cpsr的控制域,单运行读写标志域;
当处理器访问存储器失败时,进入访问中止模式,中断模式和快速中断模式分别对ARM处理器两种不同级别的中断作出响应;处理器复位后进入管理模式,操作系统内核通常处于这种模式;系统模式是一种特殊的用户模式,允许对cpsr完全读写;当处理器遇到没有定义的指令或处理器不支持该指令,进入未定义模式;用户模式运行应用程序。
分组寄存器
下图列出寄存器文件里所有37个寄存器,不过在不同时刻,有20个寄存器对程序是隐藏的。这些寄存器被称为分组寄存器,即图中的阴影部分。只有当处理器处于某种特定模式时,它们才有效,例如,中止模式使用分组寄存器r13_abt, r14_abt 和spsr_abt。除用户模式外,每一种模式都可以改写cpsr来改变当前模式。
网友评论