我在ASM和C中有这个非常简单的功能。我想从C代码调用ASM函数为double。我认为来自ASM的返回值应该存储在XMM0中,但实际发生的是我的返回值来自rax,或者如果rax没有设置,我得到1.
C代码:
#include <stdio.h>
int main() {
double a = 3.14;
double b = add(a);
printf("%lf\n", b);
return 0;
}
ASM功能:
.type add, @function
.globl add
add:
#movq $1, %rax
addsd %XMM0, %XMM0
ret
它有什么问题?感谢所有提示。
答案 0 :(得分:3)
您还没有告诉编译器函数接受或返回的内容。隐式声明将使其假定为int的返回值。
编译器应该警告你这件事。如果没有,请关闭警告。
你应该添加
extern double add(double val);
所以编译器知道了什么。