У меня есть некоторые проблемы с моим выводом... Я думаю, что у меня есть некоторые проблемы с моим массивом. Еще новичок в сборке. Задача состоит в том, чтобы разработать программу сборки, которая использует диалоговое окно для запроса числа у пользователя. Эти числа будут храниться в массиве. Появится выходное сообщение, которое показывает следующее: сумма введенных чисел, сколько чисел было введено (не считая -9999 для завершения программы), среднее число и количество элементов массива, которые больше или равно среднему значению. Любая помощь приветствуется! Вот что у меня есть:
.DATA
numArray DWORD ?
numElts DWORD 100
num DWORD ?
exitNum DWORD -9999
prompt BYTE "Enter a number", 0
string BYTE 40 DUP (?)
resultLbl BYTE "Results", 0
sum BYTE 11 DUP(?), " is the sum.", 0dh, 0ah
;numEntered BYTE 11 DUP(?), " numbers were entered."
avg BYTE 11 DUP(?), " is the average."
count BYTE 11 DUP(?), " is the number of entries that are >= the average."
.CODE
_MainProc PROC
mov eax, 0 ; sum := 0
lea ebx, numArray ; get address of nbrArray
LOOP1: input prompt, string, 40 ; read ASCII characters
atod string ; convert to integer
mov num, eax ; store in memory
mov ecx, numElts ; count := nbrElts
cmp exitNum, eax
je QUIT ; quit if -9999
add eax, [ebx] ; add number to sum
add ebx, 4 ; get address of next array elt
add ecx, 1 ; add one for count
loop LOOP1 ; repeat nbrElts times
cdq ; extend sum to quadword
idiv numElts ; calculate average
dtoa avg, ebx ; convert to ASCII characters
dtoa count, ecx
dtoa sum, eax
QUIT:
output resultLbl, sum, avg, count
ret
_MainProc ENDP
END ; end of source code
atod
пользовательской функцией? потому что обычноatod
преобразуется вdouble
, а не в целые числа, поэтому вам нужноatol
. Кроме того, описание вашей проблемы очень помогло бы. - person Necrolis   schedule 28.03.2012