wo ist der denkfehler??
-
;daten: meldung dw ? numbertest db 52 number_as_string dw ? ;daten ende mov ax, number mov bx, 10 ; endlosschleife!? LetLoopStart: xor dx, dx ;damit dx gesichert "leer" ist div bx cmp ax, 0 add dx, 48 mov number_as_string, dx mov meldung, ax add meldung, 48 invoke MessageBox, NULL,addr number_as_string, addr MsgCaption, MB_OK invoke MessageBox, NULL,addr meldung, addr MsgCaption, MB_OK JNZ LetLoopStart
der gibt mir beim ersten durchlauf korrekter weise erst ne 2 udn dann ne 5 aus, doch dann kommt statt ner 5 und ner 0 und dem ende
ne 1 und ne 0 im wechsel ... endlosschleife!!wo baue ich da bockmist?
danke + cu
-
kann es sein, daß invoke MessageBox, NULL,addr number_as_string, addr MsgCaption, MB_OK die register ax bis dx für eigene zwecke benutzt und nicht wiederherstellt?
-
korrekterweise liefert dir windows in EAX den Returncode für die MessageBox, was aber ein cmp ax,0 bringt, das bleibt wohl ein geheimniss
(denn die Winfunktionien dazwischen verändern mit sicherheit die Flags, von daher kann man am ende auch kein JNZ schreiben. Außderdem verändert die Winfunktion auch EBX bis EDX... Also vorher POPPEN (nicht falsch verstehen
). Wenn man WinAPIs aufruft, die sowieso mindestens 600 bis noch mehr Befehle enthalten, kommt es nicht mehr auf 2-3 Instruktionen in deiner schleife an.
-
Du dividierst number in AX solange durch 10 bis AX 0 hat und addierst zu dem Rest in DX 48, dann gibst du denn Rest+48 sowie den dividierten Wert in AX+48
aus.
Ist das richtig so, was möchteste du damit bezwecken.
Wenn du das JNZ auf AX beziehst steht CMP AX,0 an der falschen Stelle.
Ausserdem solltest du die relevanten Register sichern.LetLoopStart: xor dx, dx ;damit dx gesichert "leer" ist div bx add dx, 48 mov number_as_string, dx mov meldung, ax add meldung, 48 push ax //Register sichern da dir die unteren Zeilen push bx //die Registerwerte ändern invoke MessageBox, NULL,addr number_as_string, addr MsgCaption, MB_OK invoke MessageBox, NULL,addr meldung, addr MsgCaption, MB_OK pop bx pop ax cmp ax, 0 JNZ LetLoopStart
-
danke leute jetzt gehts
die mesageboxen waren eigentlich nur zur fehler suche schnell reibgebastelt ohne an die folgen zu denken(zwecks register manipulation)
ich hatte einfach ne endlosschleife udn wollte wissen wo der fehler ist
dann habe ich son bissel rumprobiert udn dabei aus irgend einem grund mal das cmp ax, 0 nach vorn gepackt, weil ich dann mit ax noch was anderes gemacht hatte ...
und nicht wieder rückgängig gemacht ...
und was das soll: es soll ne funktion werden, die mir ne zahl in nen string umwandelt ... um den rest, der noch fehlt, kümmere ich mich noch
danke nochmals udn cu
ps: und das mit den verenderlichen registern brennt sich gerade in mein hirn rein!!!