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值为一个固定地址的