【问题标题】:Assembly endless loop [HOMEWORK]组装无限循环[家庭作业]
【发布时间】:2016-10-18 17:01:56
【问题描述】:

我正在做一项家庭作业,我需要在屏幕上随机打印 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

【问题讨论】:

    标签: loops assembly masm irvine32


    【解决方案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   
    

    【讨论】:

    • 完美!就是这样!非常感谢!
    • @GreenFerret95 当有人提供了有意义的答案时,您应该将其标记为这样,这样当其他读者查看问题列表时,他们可以轻松识别出有答案的问题。如果还有多个答案,您选择的答案将立即显示在您的问题下方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2012-03-22
    相关资源
    最近更新 更多