作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 PowerPC 架构的新手,我正在查看一些带有 bcctr
的反汇编代码。操作说明。虽然手册指定了如何 bcctr
指令有效,它没有解释它通常用于什么。您能否提出此类用途的示例,并详细说明 ctr
的作用注册戏剧?我最好的猜测是它用于间接分支(例如,实现对函数指针或 vtable 的调用),但“递减 ctr 寄存器然后分支到 ctr”的目的对我来说根本不清楚。寄存器作为计数器和目标地址的双重用途尤其令人困惑。
最佳答案
bcctr
(及其无条件变体 bctr
)通常用于指向函数指针的分支。
Power ISA 指令集有两条指令¹,可用于跳转到寄存器中的地址:blr
(分支到链接寄存器)和 bctr
(分支到计数器寄存器)。使用 bctr
意味着我们可以保留链接寄存器。
在这种情况下,这里使用 ctr 寄存器没有什么特别之处——它只是我们跳转到的地址。会有mtctr
流中较早的指令,我们将地址加载到 ctr 寄存器中。
你可能会看到 bctrl
也使用:这将链接寄存器设置为当前地址 + 4,然后跳转到计数器。这允许调用(通过函数指针)通过分支回链接寄存器返回。
¹:在非特权模式下,至少
关于assembly - PowerPC 指令 `bcctr` 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28881721/
我是 PowerPC 架构的新手,我正在查看一些带有 bcctr 的反汇编代码。操作说明。虽然手册指定了如何 bcctr指令有效,它没有解释它通常用于什么。您能否提出此类用途的示例,并详细说明 ctr
我是一名优秀的程序员,十分优秀!