ARM学习笔记3

ARM的编程模式和7种工作模式

ARM采用32/64位架构
  • Byte:8-bits(1B)
  • HalfWord:16-bits(2B)
  • Word:32-bit(4B)
  • ARM指令集:32-bit
  • Thumb:16-bit
  • Thumb2:16-bit&32-bit
ARM 7种工作模式

操作系统有安全级别要求,CPU多种工作模式是为了方便操作系统的多种角色安全等级需要.

1个非特权模式(normal)
1.User:大部分程序运行在用户模式
6个特权模式(Privilege)
1个系统模式(sys)
2. System:和用户模式相同的寄存器集的特权模
5个异常模式
3. SVC(Supervisor):复位或软中断时进入
4. FIQ(fast interrupt):高优先级中断产生时进入
5. IRQ:低优先级中断产生时进入
6. Abort:存取(读写内存)异常时进入
7. Undef:执行了未定义指令时进入
ARM的37个通用寄存器:SFR通过地址操作,通用寄存器通过名字操作.
模式USERFIQIRQSVCUndefabort
r0******
r1******
r2******
r3******
r4******
r5******
r6******
r7******
r8*R8****
r9*R9****
r10*R10****
r11*R11****
r12*R12****
r13(sp)R13(SP)R13(SP)R13(SP)R13(SP)R13(SP)R13(SP)
r14(lr)R14(LR)R14(LR)R14(LR)R14(LR)R14(LR)R14(LR)
r15(pc)******
cpsr******
spsrXSPSRSPSRSPSRSPSRSPSR

注:(X 表示该模式下没有该寄存器,* 表示各模式下都是同一个寄存器,SYS模式和USER模式一样的寄存器)

每种模式下只能看到18个寄存器,R13-R14:影子寄存器(banked register)

  • sp: 栈指针.
  • lr: 模式切换时存放返回地址.
  • pc: 程序计数器,当前程序执行到哪里.
  • cpsr: 程序状态寄存器,记录当前CPU的运行状态.
  • spsr: 模式切换时保存上个CPSR,以便返回后恢复原来状态
ARM异常处理方式:
什么是异常?
异常:正常工作状态之外的流程都叫异常,中断是异常中的一种.
  • user/sys:模式属于正常态.
  • fiq/irq/svc:可以预知的异常(中断).
  • abort/undef:不可预知的异常(真正的异常).
异常向量表: CPU设计时就设定好了的,硬件决定的,硬件向软件提供了处理异常的支持.当异常发生时,CPU自动动作(pc跳转到异常向量处处理异常)
arm的异常处理机制:
异常发生时:
1. 拷贝CPSR到SPSR_<mode>       //user态时的CPSR保存到对应态mode下的SPSR

2. 设置适当的CPSR位           //CPU自动设置CPSR到mode态的CPSR值

    2. 1. 改变处理状态进入ARM态      //设置CPSR T位为0 (0 ARM态,1 thumb态)

    2. 2. 改变处理器模式进入相应的异常模式      //设置CPSR mode位为对应模式

    2. 3. 设置中断禁止位禁止相应中断(系统自动)       //设置CPSR IF位到对应(I 禁止IRQ F 禁止FIQ )

3. 保存返回地址到lr_<mode>     //保存当前态的返回地址到lr中

4. 设置PC为相应的异常向量地址   //跳转到异常处理地址处理异常
异常处理后返回时:
1. 从SPSR_<mode>恢复CPSR           //从异常态的SPSR中恢复到之前的状态中

2. 从lr_<mode>恢复PC               //从异常态的lr中恢复到之前的PC值(中断之前执行的地方)
注:上述操作只能在ARM态执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值