代码在汇编中给我一个无限循环?
Code giving me an infinite loop in assembly?
我有一些汇编代码试图将数组中的所有偶数相加。但是,当我 运行 它时,我一直得到一个无限循环,我似乎无法弄清楚为什么。任何帮助将不胜感激,谢谢。
.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, LENGTHOF array
mov eax, 0
mov esi, 0
mov al, 0
L1: ;for loop
WHYLE: ;while loop
cmp esi, ecx
inc esi
test array[esi], 1
jz EVENNUM
EVENNUM:
add al, array[esi]
jl WHYLE
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
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, LENGTHOF array
mov eax, 0
mov esi, 0
mov al, 0
L1: ;for loop
WHYLE: ;while loop
cmp esi, ecx
inc esi
test array[esi], 1
jz EVENNUM
EVENNUM:
add al, array[esi]
jl WHYLE
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
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