浅析跳转指令B和 ldr pc =label的不同
来源:互联网 发布:模拟灭火软件 编辑:程序博客网 时间:2024/05/17 08:09
今天看了一个小程序,学习了下ARM 在裸机下的开发。学习了写东西,整理下作为笔记,程序名为link.s。
.text
.global _start
.start:
b step1
step1:
ldr pc, =step2
step2:
b step2
这个小程序使用了两种跳转方法,b 跳转指令,直接向pc 寄存器赋值。
下面进行编译,链接,反汇编,看看两者的区别:
1.arm-linux-gcc -c -o link.o link.s
2.arm-linux-ld -Ttext 0x00000000 link.o -o link_elf_0x00000000
3.arm-linux-ld -Ttetx 0x30000000 link.o -o link_elf_0x30000000
4.arm-linux-objdump -D link_elf_0x00000000 >link_0x00000000.dis
5.arm-linux-objdump -D link_elf_0x30000000 >link_0x30000000.dis
其中4,5 两条语句用来反汇编,查看代码。
link_0x00000000.dis文件如下:
link_elf_0x00000000: file format elf32-littlearm
Disassembly of section .text:
00000000 <_start>:
0: eaffffff b 4 <step1>
00000004 <step1>:
4: e59ff000 ldr pc, [pc, #0] ; c <step2+0x4>
00000008 <step2>:
8: eafffffe b 8 <step2>
c: 00000008 andeq r0, r0, r8
link_0x30000000.dis文件如下:
link_elf_0x30000000: file format elf32-littlearm
Disassembly of section .text:
30000000 <_start>:
30000000: eaffffff b 30000004 <step1>
30000004 <step1>:
30000004: e59ff000 ldr pc, [pc, #0] ; 3000000c <step2+0x4>
30000008 <step2>:
30000008: eafffffe b 30000008 <step2>
3000000c: 30000008 andcc r0, r0, r8
从link_0x00000000.dis和link_0x30000000.dis可以看出,当执行了b step1 后都跳到了step1后去执行,无论text的起始执行地址在哪,可见b跳转和PC 的位置无关,但是执行了ldr pc =step2 后,根据链接条件的不同,pc的值也会不同,link_0x00000000.dis中pc=0x000000008,link_0x30000000.dis中pc=0x30000008,这一点很重要,在bootloader中常用些与位置无关的命令,如b,bl,mov,指令将代码从flash中复制到sdram中,然后再跳到运行地址。
- 浅析跳转指令B和 ldr pc =label的不同
- ARM汇编中B跳转指令和LDR跳转的区别
- ARM汇编中B跳转指令和LDR跳转的区别 【转】
- LDR PC,=RestartInit和LDR PC,RestarAddr的区别。
- arm学习b,bl,ldr指令浅析
- b reset 和 ldr pc ,reset 的区别?
- bl和ldr用作跳转指令的区别
- b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性)
- b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性)
- b MAIN 和 ldr pc,=MAIN 的区别(谈到代码位置无关性)
- LDR ,R0 =PINSEL0 LDR指令 B指令
- ARM指令ADR和LDR浅析
- ARM LDR指令和LDR伪指令的总结
- MOV、LDR加载指令和LDR伪指令的区别
- LDR指令和LDR伪指令的区别
- ldr和ldr伪指令
- 识别pc和手机版跳转不同的页面
- LDR指令和LDR伪指令区别
- U-boot在S3C44B0上的移植与分析
- [双语阅读]英国逾三分之一女性为减肥买小号衣服
- 我的测试系列之一:测试基本概念
- i believe
- 那些纷纷倒下的 Web 2.0 公司
- 浅析跳转指令B和 ldr pc =label的不同
- 丑陋的自己
- 电子信息产业振兴计划有我们的机会吗?
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- 人类的由来
- BitTorrent协议规范(BitTorrent Protocol Specification)系列之B编码(Bencoding)-第一部分
- 博客专家和论坛专家--来自两个星球的生物
- 超市内的“便利厨房”grocerant
- [双语阅读]奥地利百万富翁抽彩出售豪宅“济贫”