小编use*_*332的帖子

内部搬迁没有修好

我最近开始使用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)

这不是一个令人满意的解决方案.特别是考虑到气体文件突出了这一部分的意义.

也许你的专家可以帮助我获得一些智慧

assembly arm gnu-assembler

13
推荐指数
2
解决办法
2万
查看次数

为什么我的代码在这个C程序中突然停止了?

我写了一个程序,你可以选择任何数字,并将它自己绑定到任何数字的力量.代码工作正常,直到它到达某个部分,然后我必须输入一个字符使其移动到代码的下一部分.这就是我的意思:

#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)

c

3
推荐指数
1
解决办法
172
查看次数

标签 统计

arm ×1

assembly ×1

c ×1

gnu-assembler ×1