数组循环变量ecx(-1)

时间:2018-12-02 15:54:49

标签: arrays loops assembly

我想计算为0的数字。
MASM错误:

  

循环变量ecx(-1)。

使用ollydb。

请帮助。为什么不起作用?

.586
        .model flat, stdcall

        extern ExitProcess@4:near

        includelib c:\masm32\lib\user32.lib
        includelib C:\masm32\lib\kernel32.lib


        data segment
            mas db 1,0,9,8,0,7,8,0,2,0
            rez db 0
        data ends


        text segment
        start:
            mov cx, 10
            xor ax, ax
            xor si, si
            jcxz exit

            cycl:
                cmp mas[si], 0
                jne m1
                inc al

                m1:
                    inc si
                    loop cycl

                mov rez,al

            exit:
                push 0
                call ExitProcess@4
        text ends
        end start

1 个答案:

答案 0 :(得分:0)

您正在为32位编程!
LOOP指令将使用ECX寄存器,,但是您仅初始化了CX寄存器。会产生错误。

start:
    mov ecx, 10
    mov al, 0
    xor esi, esi
cycl:
    cmp mas[esi], 0
    jne m1
    inc al
m1:
    inc esi
    loop cycl
    mov rez,al