关于ldr指令的问题,急求正解!!高手都来看看

[复制链接]
2084|0
 楼主| zlg_arm 发表于 2007-5-6 14:24 | 显示全部楼层 |阅读模式
看看下面这个奇怪的程序<br /><br />我找了好几本书了,上面都说adr确实是专门用来加载地址的!<br />但是我看的书上也都写了对于ldr的指令也可以用于32位的常数或者地址的加载,但是这似乎有悖于我的实验程序!!<br /><br />我只想让您给个解释,到底是不是这样的结果,应该说对于两段程序同在arm状态下或者同时在thumb状态下就可以顺利使用ldr指令取得地址,但是如果两段程序跨了状态,尤其是arm下调用thumb的程序,就不可以使用ldr了??<br />高手们实际的工作中有没有这样的问题!?&nbsp;<br />代码如下<br />&nbsp;&nbsp;&nbsp;&nbsp;area&nbsp;&nbsp;&nbsp;&nbsp;example,code,readonly<br />&nbsp;&nbsp;&nbsp;&nbsp;entry<br />&nbsp;&nbsp;&nbsp;&nbsp;code32<br />Start&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;r7,&nbsp;&nbsp;&nbsp;&nbsp;FUN1+1<br />&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;r7<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;code16<br />FUN1&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;r2,FUN&nbsp;&nbsp;《〈〈〈----此处,都是取地址,但结果却不一样<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=FUN&nbsp;&nbsp;&nbsp;《〈〈〈----此处<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />FUN&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,r2&nbsp;&nbsp;〈〈〈〈---大家可以在这里使用r1或者r2都可以正确跳转,太奇怪了!!!不同的地址,结果一样<br />&nbsp;&nbsp;&nbsp;&nbsp;end<br /><br />反汇编后如下<br /><br />Start&nbsp;&nbsp;&nbsp;&nbsp;[0xe28f7005]&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,pc,#5&nbsp;;&nbsp;#0x4000000d<br />40000004&nbsp;&nbsp;&nbsp;&nbsp;[0xe12fff17]&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7<br />40000008&nbsp;&nbsp;&nbsp;&nbsp;[0xe1a00000]&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />FUN1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x46c0]&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />4000000e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0xa201]&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,0x40000014&nbsp;&nbsp;〈〈〈---这里<br />40000010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x4902]&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,0x4000001c&nbsp;;&nbsp;=&nbsp;#0x40000015〈〈〈--这里,和上面的的不一样<br />40000012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x46c0]&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />FUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x46c0]&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />40000016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x46c0]&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />40000018&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x4697]&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,r2<br />4000001a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[0x0000]&nbsp;&nbsp;&nbsp;dcw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..<br />4000001c&nbsp;&nbsp;&nbsp;&nbsp;[0x40000015]&nbsp;&nbsp;&nbsp;dcd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40000015&nbsp;&nbsp;...@<br /><br /><br />请高手给个解答<br />&nbsp;&nbsp;&nbsp;&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

72

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0