在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 3951|回复: 12

[求助] 请高手指导下面的LDR指令为何出错

[复制链接]
发表于 2015-6-6 10:58:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位大侠:      本人在arm汇编中有这么一条指令
      ldr  r5, ict_base                   其中  ict_base  QUE  0xfff00400
      在ADS软件调试时,能看到r5=0xfff00400, 可是对生成的bin文件作为boot rom仿真时,执行到这一条指令r5=0x00000000,为什么?
      另如果采用mov指令给r5赋值为 0xfff00400,则r5= 0xfff00400     ADS中不能直接赋值,要采用以下步骤:
        mov r5, 0x000000ff    lsl 24         mov  r6,  0x0000000f  lsl 20      orr r5, r5, r6
        mov  r6, 0x00000040, lsl 4          orr r5, r5, r6
        这么作,太麻烦。请高手指点一下   为什么会出现以上问题。   谢谢
 楼主| 发表于 2015-6-6 15:10:22 | 显示全部楼层
回复 1# walliamaa
上面没写好,具体汇编程序如下
ict_base  QUE  0xfff00400
    ldr  r5, =ict_base     
      在ADS软件调试时,能看到r5=0xfff00400, 可是对生成的bin文件作为boot rom仿真时,执行到这一条指令r5=0x00000000,为什么?
      另如果采用mov指令给r5赋值为 0xfff00400,则r5= 0xfff00400     ADS中不能直接赋值,要采用以下步骤:
        mov  r5, 0x000000ff      
        mov r5, r5,  lsl 24      
        mov  r6,  0x0000000f      
        mov r6, r6,  lsl 20      
        orr r5, r5, r6
        mov  r6, 0x00000040      
        mov r6, r6,  lsl 4         
        orr r5, r5, r6
发表于 2015-6-9 21:40:03 | 显示全部楼层
LDR应该编译成从Memory取数据指令吧,会不会把仿真时两次的PC不一样啊?
 楼主| 发表于 2015-6-10 15:32:37 | 显示全部楼层
回复 3# ddxx


   ldr  r0, =#0x0001指令与mov r0, #0x0001在ARM运行成二进制是一样的,即ldr装载立即数时与mov一样,但当ldr r0, [r1]指的是将存储器r1地址处的值赋给r0
发表于 2015-6-10 21:12:28 | 显示全部楼层
回复 4# walliamaa
这两个应该是不一样的,LDR是取Memory地址中数值到寄存器的。
你可以搜一下LDR与ADR的区别。
发表于 2015-6-11 01:17:37 | 显示全部楼层
谢谢分享,正需要捏
发表于 2015-6-13 18:43:09 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
发表于 2015-6-14 21:29:03 | 显示全部楼层
使用  ldr  r5, =ict_base
 楼主| 发表于 2015-6-15 11:18:54 | 显示全部楼层




   你好,使用 ldr  r5, =ict_base在ADS调试时正确,但生成的二进制文件作为ROM启动来进行代码级仿真时,r5的值变成了0x00000000所以我只有用以上的办法作,但我看资料上均使用ldr  r5, =ict_base,所以是不是哪儿设置不对,还是怎么回事。 请大家指点     谢谢
 楼主| 发表于 2015-6-15 16:37:10 | 显示全部楼层
回复 9# walliamaa

感谢大家,我发现ldr之所以出错,跟地址的值有关。  请各位大咖帮忙:   如  ldr r0, =0xff00    在ADS和代码仿真发现 r0=0xff00
  而  ldr r0, =0xff10    在ADS的armulator发现r0=0xff10, 而代码仿真时发现 r0=0x0000   why?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-6 01:10 , Processed in 0.034786 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表