ADRL与LDR的区别

            调一些代码遇到的问题,总结一下。
            先铺垫一下,有这个一个问题:
            
             圈6如何找到圈8 ?
             答案a:找出圈8相对于圈6的位置,即圈6后边第二个。这个就是位置无关了。有一个神器就是“ ADRL”,它能做到这一点。

             答案b: 找出圈8的绝对地址,即地址3。找的办法可以是这样的:位置=8 - 5。这样就可以找出绝对地址3了。这个可以先用" LDR"记下圈8的编号(即8),然后减去圈5的编号(即5)得到的就是地址3。

            上边只是理解,具体的体现答案a是在《嵌入式应用开发完全手册》光盘代码中用汇编对SDRAM初始化用到的。代码如下:
            

            b是在u-boot-2009.11中lowlevel_init.S用汇编对SDRAM进行初始化时出现的。代码如下:
            

            通过反汇编也可以看到区别:
            
             (adrl可以看出得到的就是一个相对地址)
            

            (ldr直接得到的是一个不正确的编号,再减去链接地址0x30000000,就可以是正确的绝对地址了)

            而我的问题是用了答案b,却不完整,没有对减去链接起始地址。导致出现了问题。不过也学到的东西。不过对于 答案a答案b,我现在不能说哪个方法好一点,只是都能用,u-boot中为什么用看似复杂的方法应该有它的原因。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值