0

C ファイル ( const int data_input[1024]; ) で定義されたいくつかの単純な静的配列があり、アセンブリ コードからアクセスする必要があります。それを行う正しい方法は何ですか?

これまでのところ、私はこのようにしてきました:

.global data_input

data_input_ptr:
    .word data_input

私の関数:
    adr r1, data_input_ptr
    bx lr

私の知る限り、 adr はldr r1、= data_input_ptrまたはそのようなものに対する疑似操作です。

私のやり方はあまり正しくないようです。まず、 adr r1, data_input は、リンク時に可能であることが検出された場合、PC 相対アドレス指定を直接使用する可能性があります。もう 1 つの問題は PIC に関するものです。コードが位置に依存しない必要がある場合はどうでしょう。ローダーによって data_input_ptr の値を初期化する必要がある場合、どのように機能しますか (私はそれについて正しいですか?)

4

1 に答える 1

0

あなたがそれをしている方法はうまくいくはずですが、それを処理する別の方法は、アセンブリ関数への2番目の引数として配列のアドレスを使用することです。このようなもの:

Call from c-file:
my_function(original_argument, data_input);

my_function.h:
void my_function(void *original_argument, int *array_address);

my_function.S:
my_function:
    /* r1 already contains data_input_ptr since second argument ends up in r1 */
    bx lr
于 2011-12-07T10:04:52.547 に答える