ppc64leの分岐レジスタはどのように機能しますか?ppc64leでは分岐レジスタはどのように機能しますか?
私はarmv8
に次のコードを持っている - それのためのppc64le
で同等である何bx r4
からbr x19
やarmv7
では?
するのと同じb r4
仕事やそれが間接分岐で何がやりたいように聞こえる mflr r4 mr r0, r5 mtlr r4 blr
ppc64leの分岐レジスタはどのように機能しますか?ppc64leでは分岐レジスタはどのように機能しますか?
私はarmv8
に次のコードを持っている - それのためのppc64le
で同等である何bx r4
からbr x19
やarmv7
では?
するのと同じb r4
仕事やそれが間接分岐で何がやりたいように聞こえる mflr r4 mr r0, r5 mtlr r4 blr
に私が持っています。これには、カウンタのレジスタとリンクレジスタの2つの機能があります。
リンクレジスタは、従来、関数を呼び出すときにリターンアドレスとして使用されます。あなたは、あなたの質問に話をしている間接分岐の並べ替えをしたい場合、あなたはおそらくしたいと思います
.my_func
// save r31 to the stack
...
mflr r31 // save off link register
...
bl .another_function // branch, setting the link register
nop // control will return here
...
mtlr r31 // restore LR
// restore r31 from stack
blr // branch to LR, exiting the function
:あなたはASMで機能を持っているのであれば、たとえば、あなたのような何かをするかもしれませんカウンタレジスタを使用してください。カウンタレジスタはしばしばループのために使用されます(したがって名前)が、間接分岐にも非常に便利です。あなたは、関数内で分岐している場合:
mtctr r4 // r4 - address you want to go to
bctr // unconditional branch to contents of ctr
あなたが別の関数に間接分岐を行いたい場合は、あなたのブランチは、リンクレジスタを設定したい:
mtctr r4
bctrl // branch to counter, setting link register
2つの重要な参照できます