(转载)R14也称作子程序连接寄存器

R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。

其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。

 

寄存器R14常用在如下的情况:

在每一种运行模式下,都可用R14保存子程序的返回地址(也就是 R15  PC ),当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:

 

1、执行以下任意一条指令:

MOV       PC,LR 

BX        LR

2、在子程序入口处使用以下指令将R14存入堆栈:

  STMFD   SP!,{<Regs>,LR}

    对应的,使用以下指令可以完成子程序返回:

  LDMFD   SP!,{<Regs>,PC}

R14也可作为通用寄存器。

 

 

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

posted on 2015-10-17 21:51  无悔这一生。  阅读(2784)  评论(0编辑  收藏  举报

导航