ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析

本文详细分析了ARM汇编中的ldr和adr指令的区别,包括它们在uboot中的具体应用。ldr指令用于从内存加载数据到寄存器,而adr指令则直接提供基于PC的地址。LDR伪指令涉及到了汇编时的地址计算和文字池。通过对_uboot_源码的实例解析,加深了对这两条指令的理解。
摘要由CSDN通过智能技术生成
               

ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析

 ARM汇编有ldr指令以及ldr、adr伪指令,它们都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别。
ldr r0, _startadr r0, _startldr r0, =_start_start:b _start
编译的时候设置 RO 为 0x30000000,下面是反汇编的结果:
0x00000000: e59f0004 ldr r0, [pc, #4] ; 0xc0x00000004: e28f0000 add r0, pc, #0 ; 0x00x00000008: e59f0000 ldr r0, [pc, #0] ; 0x100x0000000c: eafffffe b 0xc0x00000010: 3000000c andcc r0, r0, ip

1.ldr r0, _start

 这是一条指令,从 内存地址 _start 的位置把值读入。在这里_start是一个标号(是一个相对程序的表达式),汇编程序计算相对于 PC 的偏移量,并生成相对于 PC的前索引的指令:ldr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值