Floating Points



  • Hallo,

    ich möchte eine Funktion in Assembler schreiben, die zwei Gleitkommazahlen addiert und das Ergebnis zurück liefert. Aber irgendwie bekomme ich das nicht hin. Mit Integer-Zahlen klappt es wunderbar.
    Mein Ergebnis ist immer total falsch.

    test.c:
    #include <stdio.h>
    int main(void){
    double a,b,c;
    a=1.0E00;
    b=1.0E00;
    c=r_addu(a,b);
    printf("c=%1.16g\n",c);
    return 0;
    }

    add.S:
    .globl r_addu
    .type r_addu, @function
    r_addu:
    pushl %ebp
    movl %esp, %ebp
    fldl 8(%ebp)
    faddl 16(%ebp)
    leave
    ret

    Wo liegt der Fehler?

    Gruß

    Boris



  • Schaut eigentlich richtig aus. Du hast es offenbar so gemacht, wie ich es immer empfehle, nämlich den Output vom Compiler hernehmen und anpassen... 😉



  • Ah, mir ist schon klar, was das Problem ist: wenn du keinen Prototype für die Funktion angibts, nimmt der C-Compiler an, dass sie ein int liefert. So kann's natürlich nicht gehen...



  • Super danke!
    Das ist natürlich vollkommen richtig, was Du schreibst!!


Anmelden zum Antworten