2016-10-18 2 views
1

나는 무작위로 20 개의 RANDOM 문자 20 줄을 화면에 무작위로 인쇄해야하는 숙제를하고 있습니다. 나는 어셈블리 언어에 극히 익숙하며 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 

당신은 l1 라벨 전에에 mov를 이동해야합니다 :

 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 누군가가 의미있는 대답을하면, 다른 독자가 질문 목록을보고 대답을 쉽게 식별 할 수있는 방법으로 표시해야합니다. 둘 이상의 답변이있는 경우 선택한 질문이 귀하의 질문 바로 아래에 표시됩니다. –