2016-04-24 131 views
0

我在ASM和C中有这个非常简单的函数。我想从C代码中调用ASM函数进行加倍。我觉得从ASM返回值应存放在XMM0,但什么是真正发生的是,我的返回值被从兵营采取或如果RAX没有设置,我得到1从C(双)调用ASM x64函数,GAS

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 

它有什么问题?欣赏所有提示。

回答

3

你还没有告诉编译器函数带入或返回什么。隐式声明将使其承担int的返回值。

编译器应该警告您这一点。如果没有,请关闭警告。

您应该添加

extern double add(double val); 

所以编译器知道这是怎么回事。

+0

非常感谢! – zderzak678