Вопрос по arm, assembly – внутреннее перемещение не исправлено

13

Я недавно начал программировать на ассемблере для ядер. Мои первые маленькие демонстрации, только с разделом .text, прошли без проблем.

В качестве логического расширения я хотел структурировать ассемблерный код в обычные разделы: .text, .data, .bss.

Итак, я написал следующую простую программу:

<code> .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
</code>

Но

<code>  /opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
</code>

выходит с ошибкой

<code> prog.s: Assembler messages:
 prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
 make: *** [prog.o] Error 1
</code>

Я понятия не имею, почему ассемблер жалуется на перемещение, потому что я думал, что это задача компоновщика. Я мог бы предположить, что я должен сказать ассемблеру, что мой раздел .data не находится в последней позиции памяти на этапе сборки, но я не могу найти ничего связанного.

Хотя я нашел способ правильно собрать код, заменив

<code> .section .data
</code>

от

<code> .org .
</code>

это не удовлетворительное решение. Особенно ввиду того, что в газовой документации подчеркнут смысл этого раздела.

Может быть, кто-то из вас, экспертов, может помочь мне обрести мудрость

Ваш Ответ

0   ответов

Похожие вопросы