Anfängerfrage: LOOP in ASM32 funktioniert nicht! Warum nicht ?



  • Hi, habe neu mit ASM angefangen únd stehe jetzt schon ganz am Anfang
    auf dem Schlauch.... 😕

    Habe eine ganz einfache Schleife in asm gemacht, welche noch zusätzlich
    einen Text ausgeben soll!! Aber die Schleife beendet sich nicht ?
    Muss der invoke-Befehl noch ergänzt werden ?

    .386 
    .model flat,stdcall 
    option casemap:none 
    
    include    \masm32\include\windows.inc 
    include    \masm32\include\kernel32.inc 
    includelib \masm32\lib\kernel32.lib 
    include    \masm32\include\user32.inc 
    includelib \masm32\lib\user32.lib 
    
    .data 
        MsgBoxCaption  db "FirstProg",0
        MsgBoxText     db "MessageBOX!",0
    
    .code 
        start: 
    
            mov ecx, 10
    
            countdown: 
                 invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK 
            loop countdown    
    
            invoke ExitProcess, NULL 
        end start
    

    Soetwas müsste doch eigentlich klappen, weil wenn ich MessageBox ausserhalb
    des Loops mache, dann beendet sich ja das Programm auch, was heisst das
    MessageBox auch terminiert! Warum also im Loop nicht ?

    Ps: Vielen Dank schonmal für eure Hilfe! 🙂
    Falls sich jemand ganz viel Mühe machen möchte: Wie gebe ich den noch
    zusätzlich in der MessageBox den jeweiligen Wert von ecx mit aus ?



  • ecx wird von messagebox anscheinend verändert aber nicht wiederhergestellt. deshalb solltest du den inhalt von ECX auf den stack retten bevor du die prozedur aufrufst und nach dem aufruf wiederherstellen:

    countdown:
                 PUSH ECX
                 invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
                 POP ECX
            loop countdown
    


  • Vielen Dank für schnelle deine Antwort...jetzt verstehe ich es 😉


Anmelden zum Antworten