[ASM] Segfault (warum?)

Hallo zusammen!
ich bastle seit kurzem ein wenig in ASM vor mich hin...
jetzt habe ich ein Programm geschrieben das das Terminal sauber machen soll also pracktisch wie clear (Linux) nur nicht ganz so toll naja egal das Problem ist dass ich nachdem die 100 Spaces augegeben wurden immer ein segfault bekomme warum ist das so???
hier der Quellcode:
Code:
%include "asm_io.inc"
segment .data

segment .bss
    
segment .text
    global asm_main
asm_main:
    mov edx, 1
    newline:
        call print_nl
        inc  edx
        cmp  edx, 100
        jne  newline

    popa
    mov eax, 0
    leave
    ret

mfg st4cky
 
Code:
    popa  <<--- wozu?
    mov eax, 0
    leave
    ret
Popa ohne vorherigne Pusha geht nicht gut ;)

Edit: nicht ganz so kritisch, da das Programm danach eher beendet wird: LEAVE. Ohne ENTER oder dem Gegenstück:
push EBP
mov EBP,ESP
führt es zu Fehlern (LEAVE=mov ESP,EBP; pop EBP - macht nur dann Sinn, wenn vorher ESP in EBP gesichtert wurde)
 
oh man schon wieder so ein dummer Fehler -.-
so hab ichs jetzt:
Code:
%include "asm_io.inc"
segment .data

segment .bss
    
segment .text
    global asm_main
asm_main:
    enter 0,0 ;was passiert hier und wofür brauche ich das? (ich habe ein C Treiber Prog.
    pusha;hier wird etwas auf den Stack gescoben aber was?
    mov edx, 1
    newline:
        call print_nl
        inc  edx
        cmp  edx, 100
        jne  newline

    popa ;hier wird doch alles wieder vom Stack herunter genommen oder?
    mov eax, 0
    leave;was passiert hier?
    ret;und was passiert hier
und es Funktioniert
währe nett wenn mir einer die Fragen beantworten könnte di im Quelltext stehen :S

vielen Dank für die Hilfe :)
mfg st4cky
 
Zurück
Oben