2016-04-24 87 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