加载SDRAM以及ldr,bl实现跳转的区别
来源:互联网 发布:域名赎回期 编辑:程序博客网 时间:2024/05/22 00:03
程序主要运行过程:NAND flash启动,加载4K到片内sram,利用这4K代码,完成将这4K代码拷贝到SDRAM,并运行(这个程序小于4K)。
主程序:
.text
.global _start
_start:
halt_loop:
Makefile 版本1:
sdram.bin : head.S
clean:
反汇编版本1:
30000000 <_start>:
30000000:
30000004:
30000008:
3000000c:
30000010 <on_sdram>:
30000010:
30000014:
30000018 <halt_loop>:
30000018:
..................
300000a4:
..................
Makefile 版本2:
sdram.bin : head.S
clean:
反汇编版本2:
00000000 <_start>:
00000010 <on_sdram>:
00000018 <halt_loop>:
..............................
..............................
在链接地址为0x00000000和0x30000000的情况下产生的反汇编除了程序应该运行的地址是完全一样的。这也是
在Makefile中-Ttext 指定的链接地址。这就是 ldr pc, =on_sdram在片内4K代码段内能跳转到SDRAM中的原因。
从反汇编的
和
可以看出:
on_sdram标号代表的是程序应该在的地址(即链接地址),而不是代码当前实际在的地址(片内4K代码段)。
指定-Ttext0x30000000时,ldr pc,
指定-Ttext0x00000000时,ldr pc,
而 bl 是通过代码的相对位移(编译时自动计算)进行跳转,所以能在片内4K代码段内跳转到后面的代码段。
比如:30000004:
同理:00000004:
两者是一样的。
- 加载SDRAM以及ldr,bl实现跳转的区别
- bl 和 ldr跳转程序的区别
- bl和ldr用作跳转指令的区别
- ARM平台下ldr和bl跳转的区别
- ARM平台下bl和ldr指令的区别
- MOV、LDR加载指令和LDR伪指令的区别
- LDR 和 GDR以及QFE 的区别
- arm平台下使用bl和ldr跳转应当注意的地方(arm-linux-gcc环境)
- arm平台下使用bl和ldr跳转应当注意的地方(arm-linux-gcc环境)
- bl cache_on跳转的返回
- ARM中LDR B BX BL BLX指令的研究
- ARM汇编中B跳转指令和LDR跳转的区别
- ARM汇编中B跳转指令和LDR跳转的区别 【转】
- 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别
- 汇编跳转指令B、BL、BX、BLX 和 BXJ的区别
- B与BL的区别
- 关于ARM的B,BL跳转指令
- ARM的B,BL跳转指令
- 【数据结构笔记】6:无向图的邻接多重表存储结构
- 552. Student Attendance Record II
- 数学界的「 流氓大咖」
- HDU2476:String painter 区间dp
- 设计模式---观察者模式
- 加载SDRAM以及ldr,bl实现跳转的区别
- mysql初探
- X
- PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别
- fullpage.js
- 2016-2017学年第二学期C++第三章(2)
- Python leetcode #1 Two Sum
- 在安卓上部署服务器
- word2vector 一些问题及思考