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