打印
[S3C2440]

ARM B跳转指令

[复制链接]
1099|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱就一个字|  楼主 | 2014-8-7 01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
.text
.global _start
_start:
        ldr r0, =0x53000000
        mov r1, #0x0
        str r1, [r0]
        b .
链接地址为0x30000000,
反汇编代码如下:
30000000 <_start>:
30000000:        e3a00453         mov        r0, #1392508928        ; 0x53000000
30000004:        e3a01000         mov        r1, #0        ; 0x0
30000008:        e5801000         str        r1, [r0]
3000000c:        eaffffff         b        3000000c
不是说b跳转指令与链接地址无关吗?b跳转指令会被翻译成PC值加上偏移量。
但是反汇编后b 3000000c明显与链接地址0x30000000有关啊。
这个问题困扰我很久了,好心人给个解答。

相关帖子

沙发
ayb_ice| | 2014-8-7 09:42 | 只看该作者
本帖最后由 ayb_ice 于 2014-8-7 09:45 编辑

那是目标地址,会被转换成相对于PC的跳转,但目标地址是固定的,是3000000c

B指令也直接跳不了那么远


你没有玩过51汇编吗

SJMP  label   ; SJMP也是相对于PC的跳转,汇编器会自动转换的,没有必须在此写成SJMP PC+xxx吧

label:
...

使用特权

评论回复
板凳
aozima| | 2014-8-7 09:51 | 只看该作者
的C语言版本是
while(1);

使用特权

评论回复
地板
airwill| | 2014-8-8 14:33 | 只看该作者
本帖最后由 airwill 于 2014-8-8 14:35 编辑

不是说b跳转指令与链接地址无关吗?b跳转指令会被翻译成PC值加上偏移量。

我觉得 "与链接地址无关" 的说法有问题, 或者说不要太纠结于什么说法. 看楼主提供的例子

3000000c:        eaffffff         b        3000000c

这个其实是跳转到自身. 所以 PC 加相对地址 FFFFFF. 指令里只给出了 PC 的相对地址.
由于这条指令的地址 3000000c, 所以这条     eaffffff      反汇编写成了   b        3000000c
如果换成其他地址还是这条指令, 比如

00000100:     eaffffff     
那么反汇编就写成   b        00000100


使用特权

评论回复
5
lelee007| | 2014-8-23 15:20 | 只看该作者


“但是反汇编后b 3000000c明显与链接地址0x30000000有关啊。”
你说的这个地址3000000c是与指令“b .”里边的“.”有关系,跟指令“b”本身没半毛钱关系

这下能懂了不?

使用特权

评论回复
6
戈卫东| | 2014-8-23 21:44 | 只看该作者
你的工具为了让你能看明白跳转到哪里,又进行了转换。其实指令本身是地址无关的。

使用特权

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

本版积分规则

4

主题

14

帖子

0

粉丝