这是我的汇编程序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;
}
但是上面的代码给了我一个分段错误。导致此错误的原因是什么?如何解决?
答案 0 :(得分:4)
假设 cdecl 调用约定,您使用的ffmpeg
寄存器应该是 clobbered :它的值必须保存然后恢复被调用者是否会被修改。
调用者假定调用函数不会改变ebx
。因此,如果被调用者修改ebx
,则必须先将其保存,然后在从函数返回之前将其恢复为原始值。
可以使用寄存器ebx
,eax
和ecx
,而无需先保存它们然后恢复。因此,我建议您在代码中使用edx
替换ebx
:
edx