Einfache Schleife in MASM ECX Spinnt rum ? O_o
-
Hallo,
Assembler: MASM
OS: Windows 7 32 BitFunktioniert:
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.