我是汇编语言的新手,我需要帮助解决我一直遇到的错误,我在课堂上的任务是做我在下面做的事情,我所做的一切都是正确的,教授是怎么想的,但我无法阻止来自无限循环的程序,我有正确的答案是14但是如何在不使用ret
之类的特殊命令的情况下阻止循环无限。我该如何阻止它?
;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
答案 0 :(得分:1)
在循环的底部,你有这个指示:
loop L1
这意味着"回到L1。"
循环L1是基于ECX中的值的条件LOOP。该 真正的问题是ECX中的价值问题。 LOOP将首先 将ECX减1并将ECX中的新值与零进行比较。如果它 它不会转到标签(L1)。如果它为零则会失效。
仔细查看设置ecx值的位置。在LOOP将ecx减1并执行到L1后,会发生什么?