Я новичок в языке ассемблера, и мне нужна помощь с ошибкой, которую я постоянно испытываю, моя задача в классе - делать то, что я сделал ниже, все, что я сделал, правильно и как профессор хочет этого но я не могу остановить программу от бесконечного цикла, у меня есть правильный ответ, который равен 14, но как остановить цикл от бесконечности без использования специальных команд, таких как ret
. Как остановить его?Язык ассемблера x86 бесконечные петли IRVINE
;Declare an array of words
;Write a loop that adds all the elements of the array located in even places
;Example 3,7,2,8,9
;3+2+9=14
INCLUDE Irvine32.inc
.data
val1 WORD 3,7,2,8,9
.code
main PROC
mov eax, 0
L1:
mov ecx, (LENGTHOF val1)*(TYPE val1+2)-(TYPE val1+4)
mov eax, ecx
call writeDec
loop L1
exit
main ENDP
END main
Используйте отладчик для однократного прохождения цикла, и вы увидите проблему легко. –
Я не вижу проблемы. –
Посмотрите на значение 'ecx' как одноэтапное. Помните, что 'loop' останавливает цикл, когда' ecx' достигает нуля. –