ARM下位置無關碼和位置相關碼介紹

2021-07-22 16:15:37 字數 559 閱讀 8005

由於在學i2c裸板程式中在分析head.s時用到了這個位置無關碼這個概念,並且之前一直不明白位置無關碼,故此次通過查閱其他大神的部落格了解可以得到下面的教程,希望對學arm的朋友有一點幫助。

參考:位置無關**:即該段**無論放在記憶體的哪個位址,都能正確執行。究其原因,是因為**裡沒有使用絕對位址,都是相對位址。

位置相關碼:即它的位址與**處於的位置相關,是絕對位址,如:mov pc ,#0xff;ldr pc,=0xffff等。

位置無關碼的使用場合

1. 程式在執行期間動態載入到記憶體;

2. 程式在不同場合與不同程式組合後載入到記憶體(共享的動態鏈結庫);

3. 在執行期間不同位址相互之間的對映(如bootloader)

怎麼實現位置無關碼?

else

一開始程式位於nand中,在上電時,nand中的前4k內容會被拷貝到片內記憶體sram中,所以得用位置無關碼,呼叫的c語言函式中不允許有全域性變數,故上述**中沒有全域性變數。

位置無關碼介紹

1.程式在執行期間動態載入到記憶體 2.程式在不同場合與不同程式組合後載入到記憶體 共享的動態鏈結庫 3.在執行期間不同位址相互之間的對映 如bootloader 總結 位置無關 即該段 無論放在記憶體的哪個位址,都能正確執行。究其原因,是因為 裡沒有使用絕對位址,都是相對位址。而位置相關碼,即它的...

pch檔案中加內容加到 如下位置

pch檔案 如果希望某些內容能拷貝到任何源 檔案 oc c c 等 那麼就不要寫在 ifdef objc 和 endif之間 在 ifdef objc 和 endif之間的內容,只會拷貝到oc源 檔案中,不會拷貝到其他語言的源 檔案中 ifdef objc 獲取rgb顏色 define color ...

連線位址與位置無關指令

在點燈程式中,想看看超過位址空間的結果,於是做了個試驗,修改makefile中的連線位址為0xfffffffc,如下所示。root ubuntu work led on c cat makefile all arm linux gcc c o led.o led.c arm linux gcc c ...