装配无限循环[HOMEWORK]

时间:2016-10-18 17:01:57

标签: loops assembly masm irvine32

我正在完成一项家庭作业,我需要在屏幕上随机打印20行20个RANDOM字符。我对汇编语言非常陌生,并且不明白为什么我的循环不会结束,即使我将ecx设置为20并且每次都减少。

目前屏幕正确打印随机字母,但永远不会停止打印。

我的代码如下:

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 个答案:

答案 0 :(得分: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