Что делает эта инструкция bsr.l?

Я играю с дизассемблером 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 ответа

Согласно инструкции, bsr.l *+2 имеет шестнадцатеричный код $61FF $0000 $0000Таким образом, это, скорее всего, результат обезвреживания объектного кода с неразрешенными перемещениями, как уже упоминал Игорь Скочинский.

Я думаю, что это может быть результатом оптимизации компилятора для более компактного кода. См. "Краткая оптимизация BRA" в руководстве по компилятору.

Последние версии IDA разбирают такие ветки как skip2 (существует также skip1) для кода HC08 и HC12. Я не видел такой оптимизации в коде ColdFire раньше.

РЕДАКТИРОВАТЬ: или это может быть просто объектный файл с неразрешенными перемещениями.

Другие вопросы по тегам