汇编语言的相对跳转和绝对跳转以及反汇编代码解析

时间:2024-04-04 13:10:17

汇编语言的相对跳转和绝对跳转以及反汇编代码解析

上图第一行的b1 main为相对跳转,即跳转到pc+offset,其中pc为当前pc值,offset可以理解为偏移地址,也就是根据当前所在地址加上偏移地址实现跳转,为相对跳转。

我们来看看它的反汇编代码

汇编语言的相对跳转和绝对跳转以及反汇编代码解析

上图清除完bss区后使用b1指令跳转到30000668,要注意b1是相对跳转指令,后面写着30000668并不是说一定跳转到这个地址,这里之所以写出这个地址是方便我们看而已,如果在程序运行时我们当前的pc值为000000a0,那么则是跳转到00000668。

 

 

 

下面我们再来看ldr pc, =main,该指令为绝对跳转指令,我们可以通过反汇编来查看:下图的第一行ldr pc, [pc, #28],把pc的值赋为pc当前值+28的地址里的内容,也就是300000c4地址里的内容3000066c,也就是把pc指向main函数的地址,为绝对跳转。

汇编语言的相对跳转和绝对跳转以及反汇编代码解析

汇编语言的相对跳转和绝对跳转以及反汇编代码解析