インラインアームアセンブリーでCで宣言されたローカル変数にアクセスしたい。それ、どうやったら出来るの?アームインラインアセンブリでローカルC変数にアクセスするにはどうすればよいですか?
グローバル変数は、次のように
int temp = 0;
Function(){
__asm(
".global temp\n\t"
"LDR R2, =temp\n\t"
"LDR R2, [R2, #0]\n\t"
);
}
をアクセスすることができますしかし、どのように、私はローカル変数にアクセスできますか?ローカル変数に対して ".local"を ".local"に変更しようとしましたが、エラー( `temp 'への未定義参照)が発生しました。 私が使用しているIDEはKEILです。
どのような考えですか? ありがとうございました。
ローカル変数は、スタック上またはレジスタ内に存在します。何らかのコンパイラサポートなしでそれらを転送するのは難しいでしょう。 GCCインラインアセンブラはそれらをレジスタに登録します。私は[KeilはGCCに基づいている]と思う(http://www2.keil.com/mdk5/compiler/6/)。 '.local'は静的なリンケージを持つ 'グローバル'を意味します。 'void foo(void){static int bar;}'を宣言すれば、この方法でbarにアクセスできます。しかし、それは「C」プログラマーにとっては「ローカル」という通常の概念ではありません。それは「静的」です。 –