zoukankan      html  css  js  c++  java
  • ARM汇编-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}

    懒惰不会让你一下子跌到 但会在不知不觉中减少你的收获; 勤奋也不会让你一夜成功 但会在不知不觉中积累你的成果 越努力,越幸运。
  • 相关阅读:
    MyBatis+MySQL 返回插入的主键ID
    微信被动回复用户消息-文本消息-springmvc环境下自动生成xml
    微信自动回复消息示例
    微信自定义菜单
    微信获取二维码
    微信被动回复用户消息-文本消息-填坑
    微信获得access-token
    设置ckeditor的高度
    Java三行代码搞定MD5加密
    Highchart
  • 原文地址:https://www.cnblogs.com/Rainingday/p/7422315.html
Copyright © 2011-2022 走看看