2011-11-27 26 views
0

我有一些簡單的靜態數組定義在c文件(const int data_input [1024];)和I需要從我的彙編代碼訪問它。什麼是正確的做法?ARM-GAS:如何加載某些c文件(PIC和常規代碼)中定義的靜態數組的地址

到目前爲止,我一直在做這樣說:

 

.global data_input 

data_input_ptr: 
    .word data_input 

my_function: 
    adr r1, data_input_ptr 
    bx lr 

據我所知,ADR是僞操作站到LDR R1,= data_input_ptr或類似的東西。

對我來說,我這樣做似乎不是非常正確:首先,adr r1,data_input可能會直接使用pc相對尋址,如果它在鏈接時檢測到可能的話。 另一個問題是關於PIC:如果代碼必須與位置無關,該怎麼辦?那麼它是如何工作的,如果data_input_ptr的值必須由加載程序初始化(我對此是否正確?)

回答

0

你這樣做的方式應該可行,但另一種處理方法是使用地址該數組作爲彙編函數的第二個參數。事情是這樣的:

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 
+0

我居然做到了,那是因爲我有問題,與 - C++重整(我不得不做出符號的extern「C」) - 靜態數組將不得不重新申報成非靜態等 所以,似乎最好將所有這些髒工作委託給編譯器,並傳遞包含指向靜態數組的指針的額外參數。 – Pavel

相關問題