我最近開始爲arm核心組裝編程。我的第一個小演示,只有.text部分,沒有任何問題。內部重新定位未修復
作爲一個邏輯擴展,我想將彙編代碼構造成通常的部分:.text,.data,.bss。
所以我寫了下面的程序:
.globl _start
.section .text
_start:
b main
b .
b .
b .
b .
b .
b .
b .
main:
ldr r0, x
nop
.section .data
x: .word 0xf0f0f0f0
.end
但
/opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
退出時錯誤
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
我不知道爲什麼彙編抱怨搬遷,因爲我認爲這是鏈接器的任務。我可以想象,我必須告訴彙編程序,我的.data部分不在組裝階段的最後內存位置,但我找不到任何相關的東西。
儘管我發現了一種由
.org .
這不是一個令人滿意的解決方案,以獲得正確安裝後,代碼通過更換
.section .data
。特別是鑑於氣體文件突出了這一部分的意義。
也許你專家有人能幫助我獲得一些智慧
謝謝您的解釋和示例。這個或類似的東西應該放入binutils文檔的arm部分。我會記住鏈接器的規模很大,編碼器的規模較小。如果我有一些額外的時間,我會研究一些拆解的C程序,並希望獲得更多的見解... – user1146332 2012-04-16 13:08:34
這是公認的答案? – aditya 2013-04-23 12:30:40