Assembler Error: junk `(%ebp)' after expression



  • Moin,

    ich versteh nicht was folgende Assemblerfehlermeldung heißen soll:

    junk `(%ebp)' after expression

    Sie entsteht wenn ich folgenden Codeabschnitt

    #define MD5_R1(a, b, c, d, k, s, i) \
    \
    __asm__ volatile( \
        "movl $" #k ", %esi \n\t" \
        "addl (%ebp, %esi, 4), %" #a " \n\t" \
    
    ...
    

    durch folgenden ersetze

    #define MD5_R1(a, b, c, d, k, s, i) \
    \
    __asm__ volatile( \
        "addl $" #k "(%ebp), %" #a " \n\t" \
    
    ...
    

    Oberer Code läuft fehlerfrei, unterer nicht. Das k ist im unteren Fall schon vorm Aufruf des Makros mit 4 malgenommen worden.

    Hintergrund ist, dieses überflüssige erste MOV loszuwerden, dass ich überhaupt nur deshalb drinne hatte, weil es mir nicht möglich war, das k da einzufügen wo oben das esi steht.

    Ach ja und warum das überhaupt alles so strange mit Präprozessormakros aussieht, das liegt daran weil das ganze ursprünglich ohne ASM geschrieben war, aber ohne Funktionsoverhead laufen sollte. Den Aufruf wollte ich mit automatischem ersetzen nur minimal ändern, und obwohl es total sonderbar aussieht läuft es sogar sehr gut so.

    Wäre nett, wenn jemand das für mich interpretieren könnte. Danke 🙂 Und gute Nacht.



  • Hm, ich hab gerade festgestellt, wenn man das $ vor dem k entfernt geht's. Kann das jemand erklären ? Warum muß ich das mal machen und mal nicht ? Ich dachte, Konstanten bekommen immer ein $ vorangestellt.



  • Konstanten für die Adressberechnung brauchen halt kein $.



  • Den Code versteht ja keiner mehr und ich bin mir sicher du nach einiger Zeit ebenfalls nicht.
    Willst du dir damit Tipparbeit ersparen?
    Ich finde da sparst du an der falschen Stelle!


Anmelden zum Antworten