这个bsr.l指令做了什么?

时间:2014-11-12 22:19:34

标签: assembly 68000 disassembly coldfire

我正在玩coldfire反汇编程序并找出这段代码:

loc_F7E:
    bsr.l loc_F7E+2
    lea 12(sp),sp
    pea (284).w
    clr.l -(sp)
    move.l  a6,d0
    addi.l  #-636,d0
    move.l  d0,-(sp)

loc_F98:
    bsr.l loc_F98+2
    lea $C(sp),sp
    pea (284).w
    clr.l -(sp)
    move.l  a6,d0
    addi.l  #-$398,d0
    move.l  d0,-(sp)

我试图找出那些bsr.l的需求。对我而言,它只会跳起来。

2 个答案:

答案 0 :(得分:1)

根据手册,bsr.l *+2有十六进制代码$61FF $0000 $0000,因此很可能是由于Igor Skochinsky在上面提到过,使用未解析的重定位来解除目标代码的结果。

答案 1 :(得分:0)

我认为这些可能是针对更紧凑代码的编译器优化的结果。请参阅"短BRA优化"在编译器指南中。

最近的IDA版本为HC08和HC12代码反汇编skip2这些分支(还有skip1)。我之前没有在ColdFire代码中看到过这样的优化。

编辑:或者它可能只是一个具有未解析重定位的目标文件。