我最近开始学习ARM核的汇编语言编程。我的第一个小例程只有.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 .
那不是一个令人满意的解决方案。特别是考虑到Gas文档强调了这一部分的意义。
也许你们中的一些专家可以帮助我获得一些智慧。