全部博文(92)
分类: LINUX
2007-10-29 15:23:11
ARM处理器的存储结构
我们把一个8位的二进制数称为字节,把一个32位的二进制数称为字,把16位的二进制数称为半字。在计算机领域也都是这样规定的。
关于ARM指令:ARM指令系统分为32位的ARM指令集和16位Thumb指令集两种。
关于ARM数据:ARM处理器可以对32位的数据字进行操作,也可以对16位的数据半字进行操作,更可以对8位的字节进行操作。
关于ARM存储单元的排列:ARM有两种存储格式:一种称为大端格式;另一种是小端格式。下面以32位为例说明。(16位的格式我不使用,所以不去研究)
1、小端存储格式:每个32位的字由4字节组成,把最低位标志为A,而把最高的字节标志为A+3,这样的存储方式称为小端格式。如:地址0x0003~0x0000存放一个
数据字,地址0x0007~0x0004存放另一个数据字,0x0000地址存放的是当前字的最低位,而0x0004地址中存放的是下一个字的最低位。
2、大端存储格式:它与小端相反。把最高位的字节标记为A。而把最低位的字节标记为A+3。如:在这种存储格式中,地址0x0003~0x0000存放一个字,地址
0x0007~0x0004存放下一个字。0x0003地址存放的是当前字的最低位,而0x0007地址中存放的是下一个字的最低位。
处理器的模式:ARM处理器结构支持7种处理器模式。(见下表)
处理器模式 |
简写 |
定义 |
用户模式(User) |
usr |
正常程序所执行的模式 |
快速中断模式(Fast Interrupt) |
fig |
支持高速数据传输和高速数据处理 |
标准中断模式(Interrupt) |
irq |
用于正常的中断处理 |
管理模式(Supervisor) |
SVC |
支持操作系统的保护模式 |
中止模式(Abort) |
abt |
用于虚拟存储和存储器保护 |
未定义模式(Undefined) |
und |
支持使用软件进行仿真协处理器 |
系统模式(System) |
SYS |
支持特权级的操作系统任务 |
用户模式是最基本的处理器模式,大多数用户程序都是在用户模式下进行的。除此之外,其他模式均为特权模式。在特权模式中,管理模式也是常常用到的模式。
特权模式可以获得比用户模式更高的权限。在特权模式下,程序可以访问更多的系统资源。
在ARM处理器中,FIQ模式可以用来设计支持快速的数据传输和通道处理;IRQ模式可以用于通用中断处理;SVC可以用来设计操作系统的保护模式。
ARM的内部寄存器
ARM处理器有两种工作状态:工作在32位ARM指令时称ARM工作状态;工作在16位Thumb指令时称Thumb工作状态。在这里不讨论16位的Thumb工作状态。
ARM处理器中的寄存器R0~R14都有累加功能,R15也有累加功能,但使用受到一定的限制。ARM处理器中的寄存器R13一般作为堆栈指针使用,和51系列的单片机的
SP是等同的,且也称SP。
在ARM处理器中,共有37个寄存器,排列顺序R0~R15等。R15也是程序计数器PC,它和PC两种助记符在程序中都是有效的。还有一个程序状态寄存器CPSR不在这个排
列之内。
关于寄存器R0~R7:这组寄存器在物理上是唯一的,所有的模式下都可以使用。所以在由用户模式进入异常中断时要小心。在中断服务程序中使用这些寄存器时,
最好先加以保护;退出中断时再重新恢复,避免游泳数据丢失。
关于寄存器R8~R12:这些寄存器在物理上有两组。一组是通用的R8~R12,可以在FIQ模式以外的所有模式下使用。而在FIQ模式中有专门的一组R8_fiq~R12_fiq供
中断使用。
关于寄存器R13、R14:这两个寄存器在物理上共有6组。用户模式和系统模式共用1组,其他异常模式各有一组。R13习惯上把它当做堆栈指针,与51系列中的SP等同
。R14又称为链接寄存器LR。ARM处理器执行异常中断时,硬件自动把程序中断处的地址拷贝到R14中,而在中断程序执行完后,使用一条指令把R14中的地址值恢复给程
序计数器PC,这样才能返回到程序中断处。
关于程序计数器PC(R15):ARM处理器中的R15是程序计数器,又可称为PC,R15和PC的两种表达在编程时都是有效的。
程序状态寄存器CPSR:CPSR为各种模式下的通用的状态寄存器,为了安全地进行中断处理,各种模式都有自己的备份状态寄存器SPSR,其作用是:当处理器响应中
断时,处理器硬件自动把当前CPSR的状态存储到SPSR中,避免中断处理程序在使用CPSR时改变原来的状态,对中断返回造成影响。而在中断返回时,程序要使用一条指
令把SPSR中保存的内容恢复到CPSR中。如:MOV PC,LR 。
异常:ARM中的异常分为由意想不到的事件引起的异常和可以预料到的事件异常。
意想不到的事件引起的异常是程序开发者所不希望的。这些异常包括:复位异常;未定义指令异常;指令预取中止异常;数据访问中止异常。
预料到的事件异常:软件中断异常;IRQ中断异常;快速中断请求异常。