Einfache Schleife in MASM ECX Spinnt rum ? O_o



  • Hallo,

    Assembler: MASM
    OS: Windows 7 32 Bit

    Funktioniert:

    xor ebx,ebx
    
    lab:	
        print chr$("ok",13,10)
    
    	inc ebx	
    
    	cmp ebx,3
    
    	je beenden
    
    jmp lab
    

    Funktioniert NICHT
    Der Text ok wird die ganze Zeit in einer Endlosschleife ausgeben.
    Wieso funktioniert das nicht mit ECX ? 😡

    ECX ist doch zum Zählen da ! 😡

    xor ecx,ecx
    
    lab:	
        print chr$("ok",13,10)
    
    	inc ecx	
    
    	cmp ecx,3
    
    	je beenden
    
    jmp lab
    


  • Da print ein Macro ist, in dem prinzipiell alles moegliche passieren kann, rate ich mal:
    print veraendert ecx.
    => mit flankierenden push/pop um print kannst du Register auf den Stack sichern.

    Dazu noch 2 Anmerkungen:
    1.
    Du solltest moeglichst vermeiden, Macros zu benutzen, von denen du nicht genau weisst, was sie tun (auch wenn die Verlockungen beim MASM gross sind).

    Wenn dein Programm rumspinnt und du weisst nicht warum: Starte einen Debugger (z.B. ollydbg), suche dir ungefaehr die fehlerhafte Stelle raus - falls dir der Fehler im assembler code dann ins Auge springt: wunderbar. Ansonsten Breakpoint vor dem fehlerhaften Teil setzen und Schritt fuer Schritt durch gehen.



  • die macros des MASM32-package folgen alle der WinABI: jeglich edi,esi und ebx bleiben garantiert erhalten - alle anderen register können sich ändern.


Anmelden zum Antworten