Расчет суммы будет правильным, как только вы измените размеры данных на BYTE.
xor al, al
lea si, arr
mov cx, 10
Sum:
add al, [si]
inc si
loop Sum
Я запутался насчет адресации элементов массива.
Для адресации памяти вам необходимо настроить регистр сегмента и указать смещение (в основном это регистр адресов, например SI
, DI
или BX
).
Для хранения массива и суммы в DS: [2000h], вам нужно сначала настроить сегментный регистр DS
. А поскольку вам нужно одновременно обращаться к массиву в его первоначальном месте, вам нужно настроить 2 сегментных регистра.
mov ax, data ;Source is the array in the program
mov es, ax
mov ax, 3000h ;Destination is the designated memory
mov ds, ax
Мы можем перемещать массив и вычислять сумму одновременно!
xor al, al
lea si, arr ;Source offset (using ES)
mov di, 2000h ;Destination offset (using DS)
mov cx, 10
MoveAndSum:
mov dl, es:[si]
inc si
mov [di], dl
inc di
add al, dl
loop MoveAndSum
mov [di], al ;Store the sum at DS:[200Ah] ?????
Исходное описание задачи говорит вам хранить сумму в DS:[2010h]
Это , а не , что показывает прилагаемый чертеж!
Возможно, вам придется написать mov [2010h], al
вместо mov [di], al
.