从C调用的开始汇编 - 汇编函数给出"对象不是函数n#34;错误

时间:2014-03-02 08:04:27

标签: c assembly

我正在尝试编译我的第一个汇编代码,并且遇到了从我的主C程序调用汇编函数的问题。我使用Eclipse 3.7.2和GCC编译器在Ubuntu 12.04上。这段代码几乎是从讲座中逐字复制的,我只是想让它运行以便能够逐步完成它并观察汇编指令。但由于某种原因,它会出现以下错误:

../src/addus.c: In function ‘main’:
../src/addus.c:21:13: error: called object ‘addus’ is not a function
make: *** [src/addus.o] Error 1

主C档:

#include <stdio.h>
#include <stdlib.h>

int addusina (int, int);
int addusinc (int, int);

int
main (void)
{
  int a, b, sum;
  a = 5;
  b = 6;

  sum = addusina (a, b);
  printf ("You added %d and %d which equals %d", a, b, sum);

  sum = addusinc (a, b);
  printf ("You added %d and %d which equals %d", a, b, sum);

  return EXIT_SUCCESS;
}

汇编文件,以.s格式保存:

.global _addusina
_addus:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $16, %esp

    movl    8(%ebp), %eax
    addl    12(%ebp), %eax

    movl    %ebp, %esp
    popl    %ebp
    ret

另外两件事:

  1. 我对外部c函数没有任何问题。

  2. 它确实似乎认识到addusina在主处使用,因为如果我返回并更改名称与调用不匹配,则会抛出“声明但未使用的函数”错误。

  3. 所以看起来它在某种程度上将其视为一种功能,因为它识别它正在主要使用。

    任何指针都会很棒,因为我想修复它,所以我可以开始编写自己的代码。

    编辑:我删除了不需要的外部并修复了movl拼写和汇编函数的名称。

    编辑2:但是,即使在清理和重建项目之后,它仍然会向不再存在的函数名称抛出相同的错误。

0 个答案:

没有答案