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.


Anmelden zum Antworten