2016-04-24 7 views
0

私はASMとCでこの本当に単純な関数を持っています。私はCコードからASM関数をdoubleに呼び出す必要があります。C(ダブル)からASM x64関数を呼び出し、GAS

#include <stdio.h> 

int main() { 
double a = 3.14; 
double b = add(a); 
printf("%lf\n", b); 

return 0; 
} 
:私は、私は1

Cコードを取得し、ASMからの戻り値はXMM0に格納されるべきだと思うが、何実際に起こることは、私の戻り値はRAXからか、RAXが設定されていない場合は取られていることです

ASM機能:

.type add, @function 

.globl add 
add: 

#movq $1, %rax 
addsd %XMM0, %XMM0 

ret 

どうしたのですか?すべてのヒントを感謝します。

答えて

3

コンパイラに関数の取り込みまたは返りを知らせていません。暗黙の宣言は、intの戻り値を仮定します。

コンパイラはこれについて警告する必要があります。そうでない場合は、警告を出してください。

あなたはので、コンパイラは、最大何を知っている

extern double add(double val); 

を追加する必要があります。

+0

ありがとうございます! – zderzak678

関連する問題