最近、アームコアのアセンブラプログラミングを始めました。私の最初の小さなデモは、.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 .
それは満足のいく解決策ではありません。特に、ガスのドキュメントがこのセクションの意味を強調しているという事実を考慮して。
たぶん、あなたの専門家の誰かが私が知恵を得るのを手伝ってくれるかもしれません