新闻中心

EEPW首页>嵌入式系统>设计应用> GNU ARM汇编--(三)ARM处理器的基本原则

GNU ARM汇编--(三)ARM处理器的基本原则

作者: 时间:2016-11-26 来源:网络 收藏

除了user模式,其它模式都可以通过直接写cpsr的模式位来改变处理器模式.当然,在异常或者中断到来时,硬件会自动切换模式.下类异常和中断会引起模式切换:

reset,irq,fiq,swi,data abort,prefetch abort和undefined instruction.

处理器模式:

需要注意的是:通过直接写cpsr来改变模式的方法不会将cpsr拷贝到spsr.只有在异常或中断发生时cpsr的值才会保存.

当ARM核上电时,处于svc特权模式.从特权模式开始是有用的:初始化代码完全控制cpsr来建立其他模式的堆栈.

cpsr中的bit T是表明指令簇用的是ARM指令集还是thumb指令集.T为1表示thumb指令集,T为0表示ARM指令集.

ARM指令集和thumb指令集的特性:

中断屏蔽位:

中断屏蔽位用来屏蔽处理器的特殊中断请求.在ARM核中有两种级别的中断请求:irq和fiq.

cpsr中的中断屏蔽位是第7位和第6位(I和F),当I或F设为1时irq或fiq就被屏蔽了.

condtion flags:

condition flags可以被比较操作和带S后缀的ALU操作来更新.

条件执行:

条件执行控制指令是否被ARM核执行.处理器会比较指令的条件属性和cpsr中的condition flags,如果匹配,该指令执行;否则该指令被忽略.

流水线:

RISC处理器用流水线机制来执行指令.ARM流水线中的指令只有在完全通过执行阶段才被处理.

上面这张图标明了流水线的使用和程序计数器pc.在执行阶段,pc总是指向该指令地址加上8字节.也就是说pc总是指向当前指令的下下条指令.当用pc来计算

相对偏移量时这点是很重要的,并且它也是所有流水线的特征.

异常 中断和向量表

当异常或中断发生时,处理器会将pc指向一个特殊的内存地址.该地址所在的地址范围称为向量表.向量表的入口是跳转指令,跳转到专门处理某个异常或中断的

子程序.

存储器映射地址0x00000000是为向量表预留的.在某些处理器中向量表可以放在更高的地址,从0xffff0000开始.linux等操作系统可以利用这个特性.

当异常或者中断发生时,处理器挂起正常的处理然后从向量表中加载指令.每个向量表的入口都包含指向特殊处理例程的跳转指令.

reset向量是处理器上电后执行的第一条指令,这条指令跳转到初始化代码处.

undefined instruction向量是当处理器不能对指令译码时使用的.

software interrupt向量执行SWI指令时使用的.SWI可以用来系统调用的实现.

prefetch abort向量发生在当没有访问权限的条件下试图获取该地址的指令时,异常发生在译码阶段.

data abort向量与prefetch abort类似,只不过是访问数据发生的异常.

interrupt request向量被外部硬件用来中断处理器的正常执行.只有在cpsr的相应位为0时才能发生.

fast interrupt request向量与irq类似,是为要求更短的中断响应时间的硬件保留的.只有在cpsr的相应位为0时才能发生.


上一页 1 2 下一页

评论


技术专区

关闭