++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
http://blog.csdn.net/mr_raptor/article/details/6556163
++++++++++++++++++++++++++++++++++++++++++
1.1.1 ARM处理器不同模式下寄存器
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表示当前<FONT face=""">CPU的状态即可。
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处: