1个寄存器.
● 其中r13寄存器用于SP寄存器,始终指向栈顶,因为每种工作模式都有独立的运行栈,所以有独立的寄存器去记住各自的栈顶.
● 同理r14寄存器用于LR寄存器,用于保存模式切换时的切换位置,也是独立存在,说明模式间回跳时并不需要重新给r14_*赋值,只需在跳出去的时候保存即可.
● 系统和用户模式共用r13(sp)和r14(lr)寄存器,所以在每个子函数的栈帧中都要保存上一个调用它函数的SP和LR值,自己执行完成后要从栈帧中恢复这两个寄存器的值,否则无法界定回去后从哪里开始,从哪里计算偏移位置.
● r15(pc)寄存器是指向代码段的,所有模式复用的原因是它是共用的,一份代码,你运行与不允许,代码段就在哪里,不增不减.
● 6个状态寄存器,其中CPSR(1个)和SPSR_*(5个),它们主要用于自运行或发生模式切换后的各种状态保存.
● CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。
● SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定 的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。
七种工作模式
关于工作模式在 鸿蒙内核源码分析(总目录)之工作模式篇中有详细,可自行前往查看.此处只简单说明下. 下图来源于 ARM720T.pdf第43页,在ARM体系中,CPU工作在以下七种模式中:

(编辑:通化站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|