这是我的汇编程序add.s调用汇编函数导致段错误
.globl add
add:
movl 4(%esp), %eax
movl 8(%esp), %ebx
addl %ebx, %eax
ret
这是我的C程序。我正试图从C程序中调用汇编程序。
#include <stdio.h>
int add(int a, int b);
int main() {
int res = add(5,6);
printf("%d",res);
return 0;
}
但上面的代码给了我一个分段错误。什么导致这个错误,我该如何解决它?
如果你创建在C相同的功能,编译器如何生成代码它?它会执行一些堆栈设置吗?它是否保存它用来不打开它们的寄存器(也许它们在其他地方使用)? –
这是用'x86-64'标记的。如果这是真的,那么在我意识到的任何ABI中,这不是如何传递参数。它编译的实际操作系统和体系结构是什么?它是如何编译和链接的? (可能会发生崩溃,因为从(%esp)读取不好,因为它应该是%rsp)。 – Art
我不得不赞同艺术。你是否将其编译为32位或64位代码? –