打印

关于ADS标号连接问题

[复制链接]
1848|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用LDR R0,=标号
时,链接属性设置为:

或0x0000_0000
在启动文件中,若标号位置如下:

那么,分别编译,
在执行语句:LDR R0,=ResetEntry后,R0的结果分别是什么?
为什么我在AXD上仿真结果都是0x0000_0000呢?
和自己的理解不一样,自己理解如果设置为0x30010000,R0结果应该为0x30010000

期望解惑,谢谢。

相关帖子

沙发
centimetre| | 2010-8-4 07:48 | 只看该作者
你要反汇编看一下ldr r0,=lable这句话,这是个伪指令。可能被反汇编成几句话的。

www.cmtekchina.com

使用特权

评论回复
板凳
ADaiPlay|  楼主 | 2010-8-4 08:38 | 只看该作者
汇编成好几句话和结果是什么关系不大吧,我想知道结果为什么和我想的不一样呢。涉及到标号编译成什么数值的问题,而不是汇编成什么语句的问题。

使用特权

评论回复
地板
ADaiPlay|  楼主 | 2010-8-5 10:39 | 只看该作者
:o我的问题很弱智吗?

使用特权

评论回复
5
xinzha| | 2010-8-5 11:56 | 只看该作者
ads或者rvds的反汇编结果不能作为绝对正确的参考,没有提供全局的反汇编工具,基本上所有的反汇编都是在函数内进行,而不去考虑全局链接的相关内容,所以涉及到函数外的内容基本都是拿0来糊弄人。

使用特权

评论回复
6
ADaiPlay|  楼主 | 2010-8-5 20:12 | 只看该作者
呵呵,小弟初学,RVDS还没用过,不过我的问题今天下午解决了,将自认为解释的通的答案奉上:
(详细问题参考上面)
当设置为0x0000_0000时
执行LDR R0,ResetEntry后,R0值为0x0000_0000
当设置为0x3000_0000时,
执行LDR R0,ResetEntry后,R0值为0x3000_0000
和ADR区别在于LDR获得绝对地址,ADR获得相对地址
由于主程序一般是在RAM中执行的,所以一般定义为0x3000_0000,故2440的init.s文件中,在ROM中执行的代码跳转一般用相对跳转而非绝对跳转,因为绝对跳转是以0x3000_0000为基地址编译链接的,在以0x0000_0000为起始地址的ROM中获取以0x3000_0000为基地址编译的绝对地址必然出错。
这是小鸟分析Nand代码搬运时碰到的问题的小总结,不知正确与否,放在这里让大侠们过过目:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:老实做人,塌心做事——为理想挥汗 网站:www.edreamtek.com 文章:http://blog.csdn.net/adaiplay

23

主题

626

帖子

6

粉丝