处理器不同模式下寄存器
1.1.1ARM处理器不同模式下寄存器
CPU的模式不同,在其对应模式下可以使用的寄存器也不相同,如表3-2所示:
表3-2 ARM处理器模式下寄存器
寄存器类别 | 寄存器在汇编中的名称 | 各模式下实际访问的寄存器 | |||||||||||
用户 | 系统 | 管理 | 终止 | 未定义 | 中断 | 快中断 | |||||||
通用寄存器和程序计数器 | R0(a1) | R0 | |||||||||||
R1(a2) | R1 | ||||||||||||
R2(a3) | R2 | ||||||||||||
R3(a4) | R3 | ||||||||||||
R4(v1) | R4 | ||||||||||||
R5(v2) | R5 | ||||||||||||
R6(v3) | R6 | ||||||||||||
R7(v4) | R7 | ||||||||||||
R8(v5) | R8 | R8_fiq | |||||||||||
R9(SB,v6) | R9 | R9_fiq | |||||||||||
R10(SL,v7) | R10 | R10_fiq | |||||||||||
R11(FP,v8) | R11 | R11_fiq | |||||||||||
R12(IP) | R12 | R12_fiq | |||||||||||
R13(SP) | R13 | R13_svc | R13_abt | R13_und | R13_irq | R13_fiq | |||||||
R14(LR) | R14 | R14_svc | R14_abt | R14_und | R14_irq | R14_fiq | |||||||
R15(PC) | R15 | ||||||||||||
状态寄存器 | CPSR | CPSR | |||||||||||
SPSR | 无 | SPSR_abt | SPSR_abt | SPSR_und | SPSR_irq | SPSR_fiq | |||||||
其中R0~R7在所有模式下都可以使用的共有寄存器,R8~R12是快速中断模式下私有的寄存器,其它模式下不能使用,之所以叫其快速中断,是因为快速中断模式下,这几个私有寄存器里数据在模式切换时可以不用入栈保存。
除了用户模式和系统模式共用一组R13,R14,其余每种模式都私有自己的R13,R14,因为在每种模式下都有自己的栈空间用于执行程序,在执行程序过程中还要保存返回地址,这样可以保证在进入不同模式时,当前模式下栈空间不被破坏。比如:网卡因为数据到达,产生了中断进入中断模式,在中断模式下有自己的中断处理例程(ISR),ISR在执行时要用到栈空间,因此要使用R13,R14。中断处理完成后,返回用户模式下,要继续执行被网卡中断信号中断的执行程序。
用户模式和系统模式为什么要共用一组R13,R14呢?这是因为,在特权模式下可以自由切换工作模式,但是如果切换到用户模式下,就不能再切换到特权模式了,这是CPU为操作系统提供的保护机制,但是有的时候就需要切换到用户模式下去使用其R13,R14寄存器,比如当操作系统的进程进行上下文切换时,如果用户模式和系统模式共用一组寄存器,那么可以切换到系统模式下(系统模式是特权模式)进行操作。
所有R15和CPU同时只能处理一条指令,在取指时,有一个CPSR表示当前CPU的状态即可。
处理器不同模式寄存 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)