打印

看看这段代码问题

[复制链接]
1180|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jplzl10000|  楼主 | 2014-1-16 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
adr        r3, 3f

                  .long        __proc_info_begin
        .long        __proc_info_end
3:               .long        .
        .long        __arch_info_begin
        .long        __arch_info_end

汇编出来的代码段
c0008300:        e28f304c         add        r3, pc, #76        ; 0x4c

c000834c:        c001609c         .word        0xc001609c
c0008350:        c00160d0         .word        0xc00160d0
c0008354:        c0008354         .word        0xc0008354
c0008358:        c00160d0         .word        0xc00160d0
c000835c:        c0016138         .word        0xc0016138

现在疑惑的是
1.这个标号3处的地址是多少?是c0008354?
2.r3寄存器的值是多少?是c0008354吗?

相关帖子

沙发
jplzl10000|  楼主 | 2014-1-16 18:03 | 只看该作者
这么有技术含量的都没人回答么?

使用特权

评论回复
板凳
airwill| | 2014-1-16 21:54 | 只看该作者
这有啥技术含量?
不就是些常数嘛
后面什么都不写, 就是当前地址. 这是我猜的, 估计是编译器规定的, 可以去查一下手册.
现在玩汇编的已经很少了, 因为现在的 C 编译器还是比较强劲的.

使用特权

评论回复
地板
xinzha| | 2014-1-16 22:15 | 只看该作者
1.标号3的地址就是0xc0008354
2.一般情况下r3的值应该是0xc0008354,但是如果涉及到地址空间转换或者动态加载就不一定了,因为adr这个指令依赖于当前pc,是一个相对跳转指令。

使用特权

评论回复
5
jplzl10000|  楼主 | 2014-1-17 13:29 | 只看该作者
其实
add        r3, pc, #76
这句是重点
这个是LPC3250 ARM926EJ-S 上的一段代码
r3=pc+76+8
后面这个8弄不明白怎么回事
是指令预取?
我记的ARM9是5级流水线呀,ARM7三级流水线的话加8倒是可以理解

使用特权

评论回复
6
xinzha| | 2014-1-20 10:18 | 只看该作者
流水线加长了并不代表着预取指令与当前正在执行指令之间的周期加大,流水线的某些操作由全周期降低为半周期,从而维护一致性。

使用特权

评论回复
7
dong00520| | 2014-1-20 10:30 | 只看该作者
学习!

使用特权

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

本版积分规则

6

主题

62

帖子

0

粉丝