2017-07-06 10 views
0

AArch64の絶対ジャンプ(64ビットdword)は、プログラムカウンタを基準にしたデータソースを使用しながら、できるだけ少ない数で実行できますか?PC相対データソース(AArch64)を使用した絶対ジャンプ

は、一見すると、1はすなわち、BR続いLDRが可能であると仮定しないことがあります。

LDR x9, [PC, #0x8]; 
BR x9 
.dword 0xBADC0FFEE0DDF00D 

しかしPC以来

はもはやAArch64 上の汎用レジスタである、そうではありません。

これはどのようにできるだけ少ない手順で行うことができますか?あなたは、コンパイラに依存することができます

+0

あなたがドキュメントを読めば、それがPC相対負荷であるかを示します、 pcは命令にエンコードされていないだけで、この命令セットに含まれています。 –

+0

それは私が混乱していた理由です。解明してくれてありがとう! –

+0

"ロードレジスタ(リテラル)は、PC値と即値オフセットからアドレスを計算し、メモリからワードをロードし、それをレジスタに書き込みます。 –

答えて

3

は、いつものようにリテラルプールを生成:

LDR x9, =0xBADC0FFEE0DDF00D 
BR x9 

これが読み取り可能であると本質的に同じコードを生成します。

あなたは正確に制御したい場合は、あなたがLDR literalバージョンを使用することができ、マニュアルは言う:

ロードレジスタ(リテラル)はから単語をロードし、PC値からのアドレスとオフセット即時を算出し、メモリに格納し、レジスタに書き込みます。あなたが行うことができます。このよう

LDR x9, foo 
BR x9 
foo: .dword 0xBADC0FFEE0DDF00D 

以下読めるが、ラベルなし:

LDR x9, .+8 
BR x9 
.dword 0xBADC0FFEE0DDF00D 
関連する問題