[英]What does this bsr.l instruction do?
I'm playing with coldfire disassembler and find out this piece of code: 我正在玩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)
I'm trying to figure out what is the need for those bsr.l. 我正在尝试找出对这些bsr.l的需求。 For me it is only jumping itself. 对我来说,这只是跳跃本身。
根据手册, bsr.l *+2
十六进制代码$61FF $0000 $0000
,所以很可能是由于Igor Skochinsky在上面提到的未解析重定位而使对象代码失效。
I think these might be the result of a compiler optimization for more compact code. 我认为这些可能是编译器针对更紧凑的代码进行优化的结果。 See "Short BRA Optimization" in the compiler guide. 请参阅编译器指南中的“短BRA优化”。
Recent IDA versions disassemble such branches as skip2
(there is also skip1
) for HC08 and HC12 code. 最新的IDA版本反汇编了HC08和HC12代码的分支,例如skip2
(也存在skip1
)。 I haven't seen such optimization in ColdFire code before. 我以前从未在ColdFire代码中看到过这种优化。
EDIT: or it could be just an object file with unresolved relocations. 编辑:或者它可能只是一个具有未解决的重定位的目标文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.