2011-8-7 12:59:24
来源:互联网 发布:免费发型设计软件 编辑:程序博客网 时间:2024/05/06 11:58
2011-8-7 12:59:24
在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,
由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。
对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。
对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。
对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。
采用以下的记号来区分不同的物理寄存器:
R13_<mode>
R14_<mode>
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。
由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。
寄存器R14常用在如下的情况:
在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:
1、执行以下任意一条指令:
MOV PC,LR
BX LR
2、在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{<Regs>,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{<Regs>,PC}
R14也可作为通用寄存器。
- 2011-8-7 12:59:24
- 2011-8-7 12:59:24
- 2011-8-7 12:55:24
- 2011-7-31 12:59:42
- 2011-7-29 15:12:24
- 2011-8-24
- 2013-12-9 16:59:24
- 2011-7-20 10:06:59
- 2011-7-20 10:06:59
- 2011-7-30 21:47:59
- 2011-8-12
- 2011-8-12
- 2011-7-24-20-42
- 2011-12-8工作进展
- 6/24/2011 12:55:54 PM
- 2011-9-17 12:24:14
- 读书时间 2011/12/24 iPhone/iPad
- 2011-8-12 22:12:15
- 利用抽象工厂模式连接不同的数据库
- 两个对象之间很好的交互方法!
- 局域网的分类:以太网、令牌环、FDDI、ATM、WLAN
- 怎样成为优秀的工程师
- 虚拟机中冒险
- 2011-8-7 12:59:24
- POJ 2777 Count Color 线段树
- 为多种屏幕密度创造图标方式
- Ubuntu下android真机调试Using Hardware Devices
- cisco 1800路由上网配置
- POJ--3697[USTC campus network] BFS+hash(O(N^2))
- ADODB类库——分页类
- HTML5文件API之图片预览
- Hibernate学习笔记 3 - 关系映射配置(基于注解)