Я новичок в программировании на ассемблере (x86) и не могу понять, где я ошибаюсь в своей программе. После того, как я повторно отобразил значение, которое было перемещено в массив, я хочу отобразить текущую «СУММУ». Я думал, что с помощью регистра «ebx», поскольку он больше нигде в программе не используется, кроме как в Loop2, значение не будет перезаписано, и, таким образом, каждый оператор «добавить» будет добавлять новое значение позиции массива к моему «SUM». .
Может ли кто-нибудь определить, что я делаю неправильно?
INCLUDE Irvine32.inc
COUNT = 3
.data
inputMsg BYTE "Input an integer: ", 0
outputMsg BYTE "Redisplaying the integers: ", 0dh, 0ah, 0
sumMsg BYTE " Sum is now: ", 0
strArray SDWORD COUNT DUP(?)
.code
main PROC
; Read Integers from User
mov ebx, 0
mov ecx, COUNT
mov edx, OFFSET inputMsg
mov esi, OFFSET strArray
L1: call WriteString ; Display Prompt
call ReadInt ; Read input from user
mov [esi], eax ; Store value into array
add esi, TYPE strArray ; Move to next array position
loop L1
call Crlf
; Redisplay the integers
mov edx, OFFSET outputMsg ; Display 'outputMsg'
call WriteString
mov ecx, COUNT
mov esi, OFFSET strArray
L2: mov ebx, 0 ; Initialize ebx to 0
mov eax, [esi] ; Get integer from array
call WriteInt ; Display integer
mov edx, OFFSET sumMsg ; Display value of 'sumMsg'
call WriteString
; mov eax, ebx
add ebx, [esi]
mov eax, ebx ; <---- MOVED from above add ebx, [esi]
call WriteInt
call Crlf
add esi, TYPE strArray ; Move to next array position
loop L2
exit
main ENDP
END main