2016-10-18 3 views
1

Ich arbeite an einer Hausaufgabe, wo ich 20 Zeilen von 20 zufälligen Zeichen auf dem Bildschirm zufällig drucken muss. Ich bin extrem neu in der Assemblersprache und verstehe nicht, warum meine Schleife nicht enden wird, obwohl ich ecx auf 20 gesetzt habe und jedes Mal dekrementiere.Montage Endlosschleife [HOMEWORK]

Momentan druckt der Bildschirm die zufälligen Buchstaben korrekt aus, hört aber nie auf zu drucken.

Mein Code ist wie folgt:

INCLUDE Irvine32.inc 
    .data 
     buffer byte 20 dup(?) ;buffer of size 20 initialized ? 
     L dword 20  ;length of size 20 
    .code 

    main proc 

     l1: 
      mov ecx,L ;ecx = 20 
      call RandomString ;call Random String 
      dec ecx ;ecx -- 
      cmp ecx,0 ;compare ecx to zero 
      jne l1 ;jump if not equal back to l1 

      call WaitMsg ;press any button to continue 

    exit 
    main endp 

    RandomString PROC USES eax ecx edx 
     mov eax,26  ;eax = 26 
     call RandomRange ;call RandomRange 
     add eax, 'A' ;eax = random number between 0 and 25 + 'A' 
     mov buffer,al ;buffer = random letter 
     mov edx, OFFSET buffer ;edx = address of buffer 
     call WriteString ;write string to console 

    ret 
    RandomString ENDP 

    end main 

Antwort

1

Sie halten das Zurücksetzen ECX:

l1: 
     mov ecx,L ;ecx = 20 <--set ecx to 20 
     call RandomString 
     dec ecx ;ecx --  <--ecx is now 19 
     cmp ecx,0 ;compare ecx to zero 
     jne l1    <-- jump to l1, and ecx becomes 20 again 

Sie sollten die mov zu VOR dem l1 Label bewegen:

 mov ecx,L ;ecx = 20 
    l1: 
     call RandomString ;call Random String 
     dec ecx ;ecx -- 
     cmp ecx,0 ;compare ecx to zero 
     jne l1 
+0

perfekt! das war es genau! Sehr geschätzt! – GreenFerret95

+0

@ GreenFerret95 Wenn jemand eine sinnvolle Antwort gibt, sollten Sie es als solche markieren, wenn andere Leser die Liste der Fragen betrachten, die sie leicht identifizieren können, die Antworten haben. Wenn es auch mehr als eine Antwort gibt, wird die von Ihnen ausgewählte direkt unter Ihrer Frage angezeigt. –