【发布时间】:2012-04-23 01:40:46
【问题描述】:
我最近开始为 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 .
这不是一个令人满意的解决方案。尤其是考虑到气体文档突出了本节的意义。
也许你们中的专家可以帮助我获得一些智慧
【问题讨论】:
标签: assembly arm gnu-assembler