2016-04-24 9 views
0

Ich habe diese wirklich einfache Funktionen in ASM und C. Ich möchte ASM-Funktion von C-Code für Doppel aufrufen. Ich denke, Rückgabewert von ASM sollte in XMM0 gespeichert werden, aber was passiert eigentlich, dass mein Rückgabewert von rax genommen wird oder wenn rax nicht gesetzt ist, bekomme ich 1.Aufruf ASM x64-Funktion von C (Doppel), GAS

C-Code:

#include <stdio.h> 

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

return 0; 
} 

ASM-Funktion:

.type add, @function 

.globl add 
add: 

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

ret 

Was ist falsch daran? Schätze alle Hinweise.

Antwort

3

Sie haben dem Compiler nicht mitgeteilt, was die Funktion annimmt oder zurückgibt. Implizite Deklaration bewirkt, dass der Rückgabewert von int angenommen wird.

Der Compiler sollte Sie davor warnen. Wenn dies nicht der Fall ist, schalten Sie die Warnungen hoch.

sollten Sie

hinzufügen
extern double add(double val); 

so dass der Compiler weiß, was los ist.

+0

Vielen Dank! – zderzak678