2016-10-18 3 views
1

Я работаю над домашним заданием, где мне нужно случайно напечатать 20 строк из 20 символов RANDOM на экране. Я чрезвычайно новичок в языке ассемблера и не понимаю, почему мой цикл не закончится, хотя у меня есть ecx, равный 20, и каждый раз уменьшаюсь.Сборка бесконечной петли [HOMEWORK]

В настоящее время экран печатает случайные буквы правильно, но никогда не прекращает печать.

Мой код выглядит следующим образом:

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 

ответ

1

Вы продолжаете сброс 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 

Вы должны переместить mov к ДО l1 этикетке:

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

отлично! это было именно это! Очень признателен! – GreenFerret95

+0

@ GreenFerret95, когда кто-то дает содержательный ответ, вы должны отметить его как таковой, таким образом, когда другие читатели смотрят на список вопросов, они могут легко идентифицировать те, у которых есть ответы. Если есть более одного ответа, тот, который вы выбрали, будет отображаться непосредственно под вашим вопросом. –

Смежные вопросы