вы также используете EAX
для хранения своей суммы, но она будет испорчена любым вызовом (в частности, atod
), вы также не сохраните значение в массиве.
сделать ваш код немного более плавным (разбитым на несколько разделов для упрощения):
mov ecx, 100 ; loop count (size of array)
lea ebx, numElts ; get address of the array
LOOP1:
input prompt, string, 40 ; read ASCII characters
push ecx ; save the loop count incase
atod string ; convert to integer
pop ecx ; restore the loop count
mov [ebx], eax ; store in the array
cmp exitNum, eax
je NEXT ; quit if -9999
add ebx, 4 ; get address of next array elt
loop LOOP1 ; repeat nbrElts times
Отсюда мы можем сделать среднее, сумму и т. Д. (Я сделал только сумму и среднее, остальное зависит от вас).
NEXT:
mov ecx,100 ;loop count
lea ebx,numElts ;array address
mov edx,0 ;sum
LOOP2:
mov eax,[ebx] ;get the num
cmp eax,exitNum ;check for the sentinel
je DONE
add edx,eax ;increase the sum
add ebx,4 ;next array element
loop LOOP2
DONE:
mov eax,100
sub eax,ecx ;get the number of entries processed
mov ecx,eax
mov eax,edx ;get ready to divide
push edx ;save the sum
mov edx,0
idiv ecx ;sum / count
pop edx ;restore the sum
;from here edx has your sum, eax has your average