7

グローバル変数を宣言する C ファイルがあります。このファイルは、いくつかの ARM アセンブリ ファイルと一緒にコンパイルされます。

int foo;

void call_asm(void);

int main(void) {
    call_asm();
    return foo;
}
call_asm:
    ...

アーム インフォセンターのリンクを使用してみましたが、コンパイラ ( arm-linux-gnueabi-gcc) から、「インポート」は未定義の命令であると通知されます。

私は単に次のようなことをすることができます:

LDR    r0, =GLOBAL_VAR

C ファイルで定義されたグローバル変数をアセンブリで使用するにはどうすればよいですか?

4

3 に答える 3

2

ディレクティブを ARM アセンブラーから GNU アセンブラーに変換する必要があると思います。私の理解が正しければ、 の.global代わりにディレクティブを使用して、任意のグローバル シンボルにアクセスできます.importUsing asページから:

.グローバルシンボル

.global は、シンボルを ld から見えるようにします。部分プログラムでシンボルを定義すると、その値は、それにリンクされている他の部分プログラムで使用できるようになります。それ以外の場合、symbolは、同じプログラムにリンクされた別のファイルの同じ名前のシンボルから属性を取得します。

于 2012-11-01T17:59:28.340 に答える