汇编语言x86 IRVINE无限循环

时间:2016-03-11 01:23:37

标签: loops assembly x86 irvine32

我是汇编语言的新手,我需要帮助解决我一直遇到的错误,我在课堂上的任务是做我在下面做的事情,我所做的一切都是正确的,教授是怎么想的,但我无法阻止来自无限循环的程序,我有正确的答案是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

1 个答案:

答案 0 :(得分:1)

在循环的底部,你有这个指示:

loop L1

这意味着"回到L1。"

  

循环L1是基于ECX中的值的条件LOOP。该   真正的问题是ECX中的价值问题。 LOOP将首先   将ECX减1并将ECX中的新值与零进行比较。如果它   它不会转到标签(L1)。如果它为零则会失效。

仔细查看设置ecx值的位置。在LOOP将ecx减1并执行到L1后,会发生什么?