天天看点

ARM_s5pv210_arm_5(上)

ARM 体系架构

精简指令集(RISC)

复杂指令集(CISC)

ARM编程模型:

1.工作模式:

管理模式SVC:复位,执行SWI指令

快速中断FIQ:发生高优先级的中断

中断IRQ:发生低优先级的中断

中止:访问存储器发生非法情况

未定义:执行的指令,不能识别

系统:

用户:

2.工作模式的分类:

异常/非异常:

异常:管理模式,快速中断,中断,中止,未定义

非异常:系统,用户

权限:

特权模式:其余6种都是特权模式

非特权模式:用户模式

3.工作模式之间是否可以切换,如何切换?

工作模式之间可以切换

切换的方式有两种:

1.处理器自动切换:发生异常,处理器自动进入对应的异常模式

2.指令切换

工作模式之间的切换需要遵循的规则:

1.特权模式之间可以随意切换

2.可以从特权模式进入用户模式,不能从用户模式切换到特权模式。

3.如果用户模式要进入特权模式,可以通过调用SWI指令来完成。

4.ARM的运行状态:

1—–ARM状态

执行ARM指令,32bit

PC值字(4个字节)对齐,PC的值最后两个bit为0(2进制)

20008000

20008004

20008008

2—–Thumb状态

执行Thumb指令,16bit

PC的值半字(2个字节)对齐,PC的值最后一个bit为0(2进制)

20008000

20008002

20008004

20008006

5.运行状态的切换

1.处理器自动切换

2.用指令切换

6.寄存器:

在Cortex-A8的核心里面

寄存器没有地址,如果要使用,直接使用r0,r1

寄存器是32bit

ARM_s5pv210_arm_5(上)

R0-R12:通用寄存器

R13(sp):栈顶指针,栈顶的地址,栈是内存的一个区域,异常模式下,都有自己的栈,在发生异常的时候,cpu会自动切换异常模式,先保护现场,将上一模式下的寄存器进行入栈,等到异常处理完毕,返回上一模式时,再将栈中保存的值依次出栈到对应的寄存器。

入栈:保护现场,出栈:返回现场

R14(lr):存放返回地址

R15(pc):存放的取值的指令的地址

ARM_s5pv210_arm_5(上)

执行一条指令,分三个阶段:

取值->解码->执行

这三个阶段,分别为三个不同的硬件来完成

取值 解码 执行

push

add push

ldr add push

故正在执行的指令是push 地址:20008000

正在解码的指令的地址: 20008004

正在取值的指令的地址: 20008008

pc = 20008008

正在执行的指令的地址 = 正在取值的指令的地址 - 8

cpsr:保存当前状态

spsr:备份cpsr内的数值(状态)

/******************/