出现致命错误 A1008:尝试 运行 编程时 masm 中嵌套不匹配的宏

Getting fatal error A1008: unmatched macro nesting in masm when trying to run program

我有一些汇编代码试图将数组中的所有偶数相加。但是,当我 运行 它时,我总是遇到致命错误,而且我似乎无法弄清楚我的错误。任何帮助将不胜感激,谢谢。

.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD

.data
array BYTE 10,11,13,18,21,23,24,17,45
index BYTE 0
sum BYTE 0
arraySize BYTE ?

.code
main PROC
    mov ecx, LENGTHOF array
    mov arraySize, ecx
    mov esi, 0

L1:        ;for loop
    WHILE:
    cmp esi, ecx
    inc esi
    and array[esi], 1
    jz EVEN
    EVEN: add sum array[esi]
    jl WHILE
LOOP L1

invoke ExitProcess, 0
main ENDP
END main

WHILE 是 MASM 中的保留关键字。使用 TEST 而不是 AND 来检查均匀度。修复所有其他错误和语法错误(不匹配的操作数、缺少逗号等),以下代码可以解决问题:

.386
.model flat, stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD

.data
array BYTE 10,11,13,18,21,23,24,17,45
sum BYTE 0

.code
main PROC
    mov ecx, LENGTHOF array
    mov esi, -1
    mov al, 0

L1:        ;for loop
    inc esi
    test array[esi], 1
    jnz ODDNUM
    add al, array[esi]
ODDNUM:
    loop L1

    mov sum, al

    invoke ExitProcess, 0
main ENDP
END main