最近、アームコア用のアセンブラプログラミングが開始されました。私の最初の小さなデモは.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
終了するので、私はそれがリンカの仕事だと思った。 .dataセクションがアセンブル段階で最終的なメモリ位置に配置されていないことをアセンブラに伝えなければならないと想像できますが、関連するものは何も見つかりません。
私は満足のいく解決策ではない
.org .
によって
.section .data
を置換することによって、正しく組み立てられたコードを取得する方法を発見したが。特に、ガスの文書がこのセクションの感覚を強調しているという事実に鑑みて、
たぶん、あなたの誰かは専門家があなたがそれを行うことができる唯一の方法は、変数のアドレスをつかんでいるようで、そのアドレスから値をロードし、私はいくつかの知恵
ありがとう、あなたの説明と例をありがとう。これまたは類似のものはbinutils-documentationのarm-sectionに入るべきです。リンカーは大きなスケールを、コーダーは小規模の再配置を覚えています。私はいくつかの余分な時間がある場合、いくつかの逆アセンブルされたCプログラムを研究し、より多くの洞察を得ることを望みます... – user1146332
これは受け入れられた答えですか? – aditya