我想看一看我教授给我们的测试程序,但是我在编译时遇到了麻烦。我在Ubuntu 14.04上。我正在用
编译它gcc -Wall test.c AssemblyFunction.S -m32 -o test
我在64位计算机上运行代码时遇到问题并且读到添加-Wall和-m32将允许它工作。这样做解决了我遇到的第一个问题,但现在我得到了错误:未定义的引用`addnumbersinAssembly'。
这是C文件
#include <stdio.h>
#include <stdlib.h>
extern int addnumbersinAssembly(int, int);
int main(void)
{
int a, b;
int res;
a = 5;
b = 6;
// Call the assembly function to add the numbers
res = addnumbersinAssembly(a,b);
printf("\nThe sum as computed in assembly is : %d", res);
return(0);
}
这是汇编文件
.global _addnumbersinAssembly
_addnumbersinAssembly:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp), %eax
addl 12(%ebp), %eax # Add the args
movl %ebp,%esp
popl %ebp
ret
感谢您的时间。我一直在努力解决这个问题几个小时,所以我感谢任何帮助。
答案 0 :(得分:5)
我相信使用GCC,您将要删除汇编程序文件中的_
。所以这些界限:
.global _addnumbersinAssembly
_addnumbersinAssembly:
应该是:
.global addnumbersinAssembly
addnumbersinAssembly:
有关此问题的更多信息,请参阅此StackOverflow question/answer。
需要-m32
编译参数,因为您需要重写汇编代码以支持某些64位操作。在你的情况下,它是堆栈操作。 -Wall
不需要编译,但确实会发出更多警告。