तय नहीं किया गया है मैंने हाल ही में हाथ कोर के लिए असेंबलर प्रोग्रामिंग शुरू की है। मेरे पहले छोटे डेमो, केवल .text अनुभाग के साथ, किसी भी समस्या के बिना भाग गया।आंतरिक स्थानांतरण
एक तार्किक विस्तार के रूप में मैं असेंबलर कोड को सामान्य अनुभागों में संरचना करना चाहता था: .text, .data, .bss। त्रुटि
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
मैं कोई सुराग नहीं क्यों कोडांतरक स्थानांतरण के बारे में शिकायत की है साथ
.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
बाहर निकलता है, क्योंकि:
तो मैं निम्नलिखित साधारण प्रोग्राम लिखा था मैंने सोचा कि यह लिंकर का काम है। मैं कल्पना कर सकता हूं कि मुझे असेंबलर को बताना है कि मेरा .डेटा अनुभाग संयोजन चरण में अंतिम स्मृति पद पर स्थित नहीं है, लेकिन मुझे कुछ भी संबंधित नहीं मिल रहा है।
हालांकि मैं द्वारा
.org .
कि एक संतोषजनक समाधान नहीं है
.section .data
की जगह कोड सही ढंग से इकट्ठा किया, पाने के लिए एक रास्ता मिल गया। विशेष रूप से इस तथ्य को ध्यान में रखते हुए कि गैस दस्तावेज इस खंड की भावना को उजागर करता है।
शायद तुम विशेषज्ञों की कोई मुझे कुछ ज्ञान
अनुकूलित अपने विवरण और उदाहरण के लिए धन्यवाद। यह या कुछ समान बिनुटिल्स-दस्तावेज के आर्म-सेक्शन में जाना चाहिए। मैं याद रखूंगा कि लिंकर बड़े पैमाने पर और कोडर छोटे पैमाने पर स्थानांतरण करता है। अगर मेरे पास कुछ अतिरिक्त समय है तो मैं कुछ अलग-अलग सी-प्रोग्राम का अध्ययन करूंगा और कुछ और अंतर्दृष्टि प्राप्त करने की आशा करता हूं ... – user1146332
क्या यह स्वीकार्य उत्तर है? – aditya