Fehlerhaftes Assembler

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fehlerhaftes Assembler

    Hallo zusammen.
    Ich wollte mich mal mit der direkten Kompilierung einer Sprache in Assembler auseinandersetzen.
    Jedoch erhalte ich einen Fehler und kann ihn mir bei partout nicht erklären, weiß hier vllt jemand Rat?

    Dieser Code (2 Variablen) funktioniert:

    Quellcode

    1. .text
    2. .globl _prog
    3. _prog:
    4. subl $4, %esp
    5. movl $4, %eax
    6. movl %eax, -4(%ebp)
    7. subl $4, %esp
    8. movl $8, %eax
    9. movl %eax, -8(%ebp)
    10. addl $8, %esp
    11. ret
    Alles anzeigen


    Dieser jedoch (3 Variablen) nicht. Es kompiliert fehlerfrei, jedoch crasht es zur Laufzeit:

    Quellcode

    1. .text
    2. .globl _prog
    3. _prog:
    4. subl $4, %esp
    5. movl $4, %eax
    6. movl %eax, -4(%ebp)
    7. subl $4, %esp
    8. movl $8, %eax
    9. movl %eax, -8(%ebp)
    10. subl $4, %esp
    11. movl $12, %eax
    12. movl %eax, -12(%ebp)
    13. addl $12, %esp
    14. ret
    Alles anzeigen


    Wie man sehen kann, fordere ich Speicher an und move die Variable genau wie die anderen beiden vorherigen. Woran kann der Fehler liegen? Habe ich zuwenig Speicher auf dem Stack? Und wenn ja, wieso?
    Das "runtime" C Program sieht im übrigen so aus:

    Quellcode

    1. #include <stdio.h>
    2. void prog();
    3. int main() {
    4. prog();
    5. }
    6. void print_int(int n) {
    7. printf("%d\n", n);
    8. }
    Alles anzeigen


    Und kompiliert wird ganz normal per

    Quellcode

    1. gcc -o out.exe out.S rt.c


    Weiß jemand woran es liegen könnte?

    edit:
    Ich bin der Meinung, dass das Problem mit ​addl $12, %esp zusammenhängt. Ohne diesen Teil wird das Programm zwar nie beendet (läuft scheinbar ewig) crasht jedoch nicht.
    Addiere ich natürlich mehr oder weniger als 12 Byte (also das, was ich auch angefordert habe) crasht es (natürlich) auch.