2017-11-13 24 views
1

ARMアセンブリを使用してアドレスにレジスタ値を格納したい。私はこのようなものを探しています。ARMアセンブリを使用してレジスタから絶対アドレスに値を格納するにはどうすればよいですか?

STR R0, =0x20000000   // store r0 to 0x20000000 

しかしこれは誤りです。これを行うには

一つの方法は、以下のように、ある

LDR R1, =0x20000000 
STR R0, [R1 + #0] 

しかし、私は上記のように、1つのレジスタのみを使用して、それをしたいです。だから、それを行う方法はありますか?

+2

完全な32ビットの絶対アドレスをエンコードするのに十分な場所が機械語のコードにありません。あなたは自由に使用することができない場合はもちろん、スタックにレジスタを保存することができます。 – Jester

+0

マシンコード命令のサイズはどのくらいですか? –

+1

@MuzahirHussainサムコード(Cortex M3で使用)では、命令は2または4バイトの長さです。 – fuz

答えて

2

しかし、私は上記のように1つのレジスタを使ってやりたいと思います。

これを行うためのインストゥルメンタルはありません。すべてのストア命令では、デスティネーションアドレスに少なくとも1つのレジスタが必要です。

理由は非常に簡単です:32ビット命令を持っているにもかかわらず、常にオペコードのビット数を増やす必要があるため、完全な32ビットアドレスをエンコードするには十分なビットがありません。

ロードおよびストア命令のオプティカルオフセットは同じ理由で制限されています。

関連する問題