c での ASM の使用についてちょっとした質問があります。命令を実行したい:
LDR PC,=0x123456
これにより、「オペランドに予期しないトークンがあります」というエラーが表示されます。
asm("LDR PC,=0x123456");
これにより、「無効な制約」が発生します。
asm("LDR PC," : "m" (0x123456));
これを行う正しい方法は何ですか?
@Étienneに同意します。mi Googleツールチェーンでコードを試しました。それはうまくいっています。
コンパイラがディレクティブを命令 (通常は 2 つのmov命令)に変更する方法のマニュアルを読む必要があると思います。
おそらく、プレーン C で必要な効果を達成できます。
((void (*)(void))0x123456)();
または、より詳細にしたい場合:
typedef void FN(void);
((FN*)0x123456)();