Недавно я начал программировать на ассемблере для ядер рук. Мои первые небольшие демонстрации, только с разделом.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 не находится в конечной позиции памяти на этапе сборки, но я не могу найти ничего связанного.
Хотя я нашел способ правильно собрать код, заменив
.section.data
на
.org.
, это не является удовлетворительным решением. Особенно с учетом того, что в газовой документации подчеркивается смысл этого раздела.
Может быть, кто-то из вас, экспертов, может помочь мне обрести мудрость