关闭

bl和ldr用作跳转指令的区别

553人阅读 评论(0) 收藏 举报
分类:

bl指令经过汇编编译器编译后形成的指令码表示:新的pc值为,从当前pc值开始(即pc+8),跳过offset* 4个字节位置。下面看反汇编:


当前pc值为:bldisable_watch_dog经过编译后机器码为0xeb000005,即offset为5条指令,偏移字节数为5*4=20=0x14。当前pc值为0x30000000+8=0x30000008。则指令执行后的pc值为:0x30000008+0x14=0x3000001c,即为disable_watch_dog标号的地址。

因此,bl和b指令被称为位置无关指令。在编码时要生成位置无关指令有两点要注意:

1.       跳转使用bl和b指令;2.C语言中不用全局变量和静态变量。

 

下面再看ldr用作跳转指令。ldr指令经过编译后指令码表示:新的pc值为一个固定地址的值,即ldr也叫做位置相关跳转。

继续看上面这段反汇编,ldr指令编译后机器码表示:新的pc值被临时存储在当前pc加上144字节位置处(0x300000a4)。当前pc值为0x3000000c+8=0x30000014,然后0x30000014+144=0x300000a4,跟反汇编中注释吻合。


再看0x300000a4地址处存放值为0x30000010,即on_sdram标号的地址。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:919次
    • 积分:38
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档