MOV PC,LR
看下面这个ARM汇编吧
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!,{,LR}
对应的,运用以下指令能够完结子程序的回来
LDMFD SP!, {,LR}