PowerPC指令`bcctr`的目的是什么?

Joh*_*lén 7 assembly powerpc

我是PowerPC架构的新手,我正在看一些带有bcctr指令的反汇编代码.尽管手册指定了bcctr指令的工作原理,但它并没有解释它通常用于什么.你能想出这些用途的例子,并详细说明ctr寄存器的用途吗?我最好的猜测是它用于间接分支(例如,实现对函数指针或vtable的调用),但"减少ctr寄存器然后分支到ctr"的目的对我来说根本不清楚.寄存器作为计数器和目标地址的双重用途尤其令人困惑.

Jer*_*err 10

bcctr(和其变体无条件,bctr)通常用于分支到一个函数指针.

Power ISA指令集有两条指令¹,可用于分支寄存器中的地址:( blr 分支到链接寄存器)和bctr(分支到计数器寄存器).使用bctr手段我们可以保留链接寄存器.

在这种情况下,在这里使用ctr寄存器并没有什么特别之处 - 它只是我们分支到的地址.mtctr流中早先会有一条指令,我们将地址加载到ctr寄存器中.

您可能也会看到bctrl使用过:这会将链接寄存器设置为当前地址+4,然后分支到计数器.这允许通过分支返回到链接寄存器来调用(通过函数指针).

¹:至少在非特权模式下