Brauche Hilfe bei einer Schleife
-
Hallo wieso lande ich hier immer in einer Endlosschleife ?
So kann ich ja z.b. in TASM eine Schleife benutzen:
Das funktioniert auch aber wie sieht das bei MASM aus wieso lande ich immer in einer Endlosschleife ?
.model small .stack 400h .data zahl DB 0,"$" endl db 10,13,"$" .CODE start: mov ax,@data mov ds,ax mov cx,2 mov dx,offset zahl i: add zahl,1 mov ah,9h int 21h Loop i mov ah, 4ch int 21h END start
include \masm32\include\masm32rt.inc .data var db "ok",0 .code start: call main inkey exit main proc mov ecx , 2 schleife: print offset var loop schleife ret main endp end start
-
Versuch folgendes:
include \masm32\include\masm32rt.inc .data var db "ok',0 .code start: call main inkey exit main proc mov ecx , 2 schleife: push ecx ; ecx auf dem Stack sichern print offset var pop ecx ; ecx wiederherstellen loop schleife ret main endp end start
mfg
-
include \masm32\include\masm32rt.inc .data var db "ok",0 .code start: call main inkey exit main proc LOCAL cntr:DWORD ; esi,edi und ebx werden entsprechend der >WinABI< von ; aufgerufenen Funktionen gesichert. ; eax,ecx und edx müssen (im Algemeinen) vor Funktionsaufrufen ; gesichert werden, da diese verändert werden.(siehe emmax's code) mov esi,2 @@: print offset var,10,13 dec esi jnz @B @@: ;; erzeugt gleichen code wie obrige Schleife ; mov esi,2 ; .repeat ; print offset var,10,13 ; dec esi ; .until ZERO? ;; while-Schleife ; mov esi,2 ; .while esi ; print offset var,10,13 ; dec esi ; .endw ;; lokale Variable als Zähler ; mov cntr,2 ; .while cntr ; print offset var,10,13 ; dec cntr ; .endw ret main endp end start
BTW: loop sollte man nicht verwenden.