MOV PC,LR

Posted 不明白就去明白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MOV PC,LR相关的知识,希望对你有一定的参考价值。

MOV PC,LR

BL NEXT ;跳转到子程序

......... ;NEXT处执行

NEXT

..........

MOV PC,LR ;从子程序返回

这里的BL是跳转的意思,LR(R14)保存了返回地址

PC(R15)是当前地址,把LR给PC就是从子程序返回

这里有一下总结

首先

1.SP(R13) LR(R14)PC(R15)

2.lr(r14)的作用问题,这个lr一般来说有两个作用:
1》.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。
2》.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。

另外注意pc,在调试的时候显示的是当前指令地址,而用mov lr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用mov pc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.

3.》我以前看书不懂的地方

子程序返回的三种方法

现在总结如下

1.MOV PC,LR

2.BL LR

3.在子程序入口处使用以下指令将R14存入堆栈

STMFD SP!,{<Regs>,LR}

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

LDMFD SP!, {<Regs>,LR}

以上是关于MOV PC,LR的主要内容,如果未能解决你的问题,请参考以下文章

ARM MOV PC加8

关于ARM PC值

汇编语言调用c语言

ARM指令adr adrl ldr mov

ARM 内核SP,LR,PC寄存器

伪指令的MOV32 伪指令