打印

关于使用ldr指令和adr指令的疑问!?急求!

[复制链接]
2309|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zlg_arm|  楼主 | 2007-5-3 09:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在学习arm汇编的时候感觉很奇怪,为什么使用ldr指令取得的程序段语句标号的值和使用adr指令的值是不一样的?!
使用ldr始终不能取得正确的地址值!!!这是为什么?

源代码如下
N    equ    10

    area    example,code,readonly
    entry
    code32

START    ldr        sp,        =0x40003f00
此处--〉 ldr        r3,        =FUN
         mov        r0,        #N
         mov        r1,        r0
         add        r3,        r3,        #1
         stmfd    sp!,    {r1-r12,lr}
         bx        r3
 STOP    ldmfd    sp!,    {r1-r12,lr}
          b        START
            
        
        
         code16
FUN       cmp        r0,        #0
          beq        RET
LOOP      sub        r1,        r1,        #1
          add        r0,        r1,        r0
          cmp        r1,        #0
          bne        LOOP
RET       ldr        r3,        =STOP
          ldr        r2,        =0x01
          bic        r3,        r2
          bx        r3
          end      

相关帖子

沙发
luhuaren| | 2007-5-3 18:59 | 只看该作者

re

adr 是一条伪指令  你要看它反汇编后的指令      

使用特权

评论回复
板凳
zlg_arm|  楼主 | 2007-5-4 14:29 | 只看该作者

谢谢

谢谢!看来还要好好研究一下

使用特权

评论回复
地板
zlg_arm|  楼主 | 2007-5-4 20:18 | 只看该作者

看完了,令人费解

关键的原因找到了,但是还是不能理解!!!就是ldr的指令执行的结果取得的值就是指向高地址,而adr指向的是地址!

请看下面我做的实验分析

我觉得很奇怪的一点就是,为什么在thumb的指令中,使用ldr加载了一个地址,为什么这个地址的指向是该指令的高地址位,比如该指令是在0x4000001c,0x4000001d这两个地址空间内保存,并且我在这条thumb指令之前加了语句标号FUN,然后使用ldr  r1,=FUN加载这个地址,虽然执行的时候没有任何问题!但是这条指令加载的值确是0x4000001d,这是我觉得很奇怪的地方!我看了我使用的都是小端模式的!

代码如下
        area    example,code,readonly
        entry
        code32
        
    
Start    cmp        r0,        #0
        adr        r7,        FUN+1
        bx        r7
        cmp r0,r1
        cmp r0,r1
        cmp r0,r1
        cmp r0,r1

        
        
        code16
        
FUN        cmp r0,r2
        cmp r0,r2
        cmp r0,r2
        ldr    r1,=FUN
        
        cmp r0,r2
        cmp r0,r2
        cmp r0,r2
        mov    pc,r1

        end        

使用特权

评论回复
5
zlg_arm|  楼主 | 2007-5-4 20:23 | 只看该作者

奇怪

但是在arm状态下adr和ldr的结果是一样的,都是取得4字节指令的低地址!就是在thumb状态下不一样了!

使用特权

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

本版积分规则

17

主题

72

帖子

0

粉丝