从C(双),GAS调用ASM x64函数

时间:2016-04-24 10:24:02

标签: c function assembly 64-bit call

我在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

它有什么问题?感谢所有提示。

1 个答案:

答案 0 :(得分:3)

您还没有告诉编译器函数接受或返回的内容。隐式声明将使其假定为int的返回值。

编译器应该警告你这件事。如果没有,请关闭警告。

你应该添加

extern double add(double val);

所以编译器知道了什么。