Что делает эта инструкция 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 раньше.
РЕДАКТИРОВАТЬ: или это может быть просто объектный файл с неразрешенными перемещениями.