;Программа сложения N (N<16) однобайтных чисел.
;Числа располагаются в памяти программ, начиная с адреса после кодов программы.
;Результат фиксируется в ячейках внешней памяти, начиная с адреса 0000H.
sumaddr equ 0 ;адрес внешней памяти, куда запишем результат
sumlow equ 8 ;переменные во внутренней памяти для суммы, младший байт
sumhigh equ 9 ;старший байт
stack eqy 60h ;вершина стека
mov sp, #stack ;стек
mov dptr, #array ;адрес массива в программной памяти
mov r2, #0 ;индекс в массиве
mov r3, #N ;количество элементов массива
mov sumlow, #0 ;пусть сумма пока равна 0
mov sumhigh, #0
loop: ;цикл по складыванию элементов массива
mov a, r2 ;индекс очередного элемента
inc r2 ;для следующего
movc a, @a+dptr ;читаем в аккум из программной памяти байт по адресу [a]+[dptr]
add a, sumlow ;складываем с младшим
mov sumlow, a ;сохраняем младший байт
mov a, #0 ;надо учесть перенос!
addc a, sumhigh ;для этого складываем старший байт с 0 и с переносом (FC)
mov sumhigh, a ;сохраняем старший байт
djnz r3, loop ;r3=r3-1; циклим, пока r3!=0
mov dptr, #sumaddr ;пишем найденную сумму во внешнюю память
mov a, sumlow ;сначала младший байт
movx @dptr, a ;пишем a->[dptr]
inc dptr
mov a, sumhigh ;следом старший байт суммы
movx @dptr, a ;пишем a->[dptr]
jmp $ ;задача решена, организовываем бесконечный цикл:
; крутимся на одном месте
array: ;данные
db 3,6,4,8,2,0,3,7,1,6,5,3,8,2,23h,10h
N equ $-array ;длина массива
end
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.