我最近开始使用arm core进行汇编编程.我的第一个小演示,只有.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
Run Code Online (Sandbox Code Playgroud)
但
/opt/arm/bin/arm-as -ggdb -mcpu=arm7tdmi demo.s -o demo.o
Run Code Online (Sandbox Code Playgroud)
退出并出错
prog.s: Assembler messages:
prog.s:17: Error: internal_relocation (type: OFFSET_IMM) not fixed up
make: *** [prog.o] Error 1
Run Code Online (Sandbox Code Playgroud)
我不知道为什么汇编程序抱怨重定位,因为我认为这是链接器的任务.我可以想象我必须告诉汇编程序我的.data部分不是在汇编阶段的最终内存位置,但我找不到任何相关的东西.
虽然我找到了一种方法来通过替换来正确组装代码
.section .data
Run Code Online (Sandbox Code Playgroud)
通过
.org .
Run Code Online (Sandbox Code Playgroud)
这不是一个令人满意的解决方案.特别是考虑到气体文件突出了这一部分的意义.
也许你的专家可以帮助我获得一些智慧
我写了一个程序,你可以选择任何数字,并将它自己绑定到任何数字的力量.代码工作正常,直到它到达某个部分,然后我必须输入一个字符使其移动到代码的下一部分.这就是我的意思:
#include <stdio.h>
int power (int x, int y);
int
power (int x, int y)
{
int i, b;
i = 1;
scanf ("%d", &x);
scanf ("%d", &y);
b = x;
for (i = 1; i < y; i++) {
x *= b;
}
return x;
}
int
main ()
{
int base, i;
printf ("Type the base number: ");
scanf ("%d", &base);
printf ("Type the power: ");
scanf ("%d", &i);
int final = power (base, i);
printf (" The …Run Code Online (Sandbox Code Playgroud)