来源网址: http://hi.baidu.com/a843538946/item/4e2a34fe48b6e5be31c199ec

终于明白这个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!,{<Regs>,LR}

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

LDMFD  SP!,      {<Regs>,LR}

LR(R14)寄存器相关推荐

  1. ARM汇编中lr(r14)寄存器的作用

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

  2. ARM三个寄存器 : 堆栈指针SP(R13)、连接寄存器LR(R14)和程序计数器PC(R15)

    深入理解ARM的这三个寄存器,对编程以及操作系统的移植都是必要的. 1.堆栈指针R13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式.非异常模式( ...

  3. Linux学习笔记---Cortex-A7 常用汇编指令

    MOV指令 MOV R0,R1         @将寄存器R1中的数据传递给R0 MOV R0,#0X12   @将立即数0X12传递给R0寄存器 MRS指令 MRS R0,CPSR     @将特殊 ...

  4. 中断的概念和机制————(清华大学慕课记录)

    中断 中断的关键要素 中断处理流程 标志位(Flag) 使能(Enable) 中断服务程序ISR 中断向量表 中断嵌套和中断优先级 中断潜伏期 中断 and 轮询 形象解释 轮询:一个简单的例子解释轮 ...

  5. iOS汇编教程:ARM(2)

    感谢唐巧抽出时间对本文进行double-check. 本文是iOS汇编教程:ARM第二篇. iOS汇编教程:ARM目录如下[共分为两篇]: iOS汇编教程:ARM(1) 开始:什么是汇编 函数调用约定 ...

  6. r14/lr寄存器的值

    LR 连接寄存器:Link Register LR寄存器的作用主要由两个: 一是用来保存子程序的返回地址: 当通过BL或BLX指令调用子程序时,硬件自动将子程序返回地址保存在R14寄存器中.子程序返回 ...

  7. cortex-m3 R14(LR)寄存器的作用

    LR 连接寄存器:Link Register LR寄存器的作用主要由两个: 一是用来保存子程序的返回地址: 当通过BL或BLX指令调用子程序时,硬件自动将子程序返回地址保存在R14寄存器中.子程序返回 ...

  8. 【转】sp,lr,pc即汇编语言中几个常见寄存器的使用

    arm汇编基础(转) 先看个例子: void test2(int a,int b,int c) { int k=a,j=b,m=c; } GCC反汇编: 00000064 <test2>: ...

  9. ARM学习(1) 寄存器的理解 ===》FP、SP、LR寄存器

    笔者今天来聊聊对于ARM几个特殊寄存器的理解,FP.SP和LR. ARM特殊寄存器的理解====FP.SP和LR 1.介绍 2.作用 2.1 FP的作用 2.2 SP的作用 2.3 LR的作用 2.3 ...

最新文章

  1. Linux下修改Mysql数据库存放路径
  2. 什么是清华大学的“三好”学生?
  3. 部署自建CA颁发证书实现https加密
  4. linux shell 小数计算
  5. bootstrap使用总结(导航在carousel居中之上)
  6. Exchange server 2003迁移到2010后,手动更新地址列表,提示OAB Versions无效
  7. windows下python 入门准备工作
  8. OpenGL C#绘图环境配置
  9. xml 标签带有号php,php截取字符串并保留完整xml标签的函数代码
  10. java8 64_【java8下载】Java8最新版下载 64位-七喜软件园
  11. php实现mpg自动提取音轨,视频如何导出音轨 怎么将双音轨mpg提取其中一个音轨保存...
  12. 计算机的自带拍视频教程,电脑如何录制视频并剪辑
  13. idea中设置EcmaScript6
  14. 计算机加入域用户名,将客户端计算机加入到域中
  15. 使用Python画小猪佩奇
  16. 安全、智慧是 Oppo 快充技术最新的发展方向
  17. I/O函数 writel __raw_writel mb()/rmb()/wmb()
  18. 集成微信支付后每次打开app都会跳转到微信显示正在连接
  19. 浅谈在探索数分之路上的“数据思维”论述
  20. 不明所以然,就被KO了,内部人员道出真相,原因竟在这!

热门文章

  1. 了解语音合成系统WORLD(日语)(译)
  2. Pathon做数据分析
  3. 数据结构复习-基础、线性表、栈、队列、串
  4. Redhat安装完成后,注册激活方法
  5. python3.7安装包下载_Python3.7.6下载
  6. 病毒计算机系统还原,有了这款系统还原软件,电脑不再怕病毒来犯
  7. 较量 软件破解方法大揭密(图)
  8. ES默认的标准分析器
  9. 字符集导致编码错误的原因
  10. pwn基本ROP——ret2syscall