assembly PowerPC指令'bcctr'的用途是什么?

6rqinv9w  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(228)

我是PowerPC架构的新手,我正在查看一些使用bcctr指令的反汇编代码。虽然手册说明了bcctr指令的工作原理,但并没有解释它通常的用途。
你能举出这样的例子,并详细说明ctr寄存器所起的作用吗?
我最好的猜测是它用于间接分支(例如,实现对函数指针或vtable的调用),但
“递减ctr寄存器,然后分支到ctr
寄存器既用作计数器又用作目的地址,这尤其令人困惑。

tjjdgumg

tjjdgumg1#

bcctr(及其无条件变量bctr)通常用于指向函数指针的分支。
Power伊萨指令集有两条指令¹,可用于分支到寄存器中的地址:blr(分支到链接寄存器)和bctr(分支到计数器寄存器)。使用bctr意味着我们可以保留链接寄存器。
在这种情况下,这里使用ctr寄存器没有什么特别之处-它只是我们分支到的地址。在流的前面会有一个mtctr指令,我们在那里将一个地址加载到ctr寄存器。
您可能也会看到使用bctrl:这将链接寄存器设置为当前地址+ 4,然后分支到计数器。2这允许调用(通过函数指针)通过分支返回到链接寄存器。
¹:至少在非特权模式下

bqucvtff

bqucvtff2#

看看POWER伊萨,我看到:
bcctr =条件分支到计数寄存器
用法:bcctr B0、BI、BH
算法:

cond_ok <- BO_0 | (CR_{BI+32} ≡ BO 1 )
if cond_ok then NIA <- {iea} CTR_{0:61} || 0b00
if LK then LR <- {iea} CIA + 4

BI+32指定要测试的条件寄存器位。BO字段用于解析分支,如图44所示。BH字段的使用如图46所示。分支目标地址为CTR 0:61|| 0b00,在32位模式下,分支目标地址的高32位设置为0。如果LK=1,则分支指令之后的指令的有效地址被放入链接寄存器。如果指定了“递减并测试CTR”选项(BO 2 =0),则指令格式无效。
来源:Power ISA Version 2.07

相关问题