К последнему элементу второго массива прибавить первый элемент первого, к предпоследнему - прибавить второй элемент - Assembler
Формулировка задачи:
Требуется к последнему элементу второго массива прибавить первый элемент первого, к предпоследнему - прибавить второй элемент и т.д.
Не могу разобрать что я делаю не так.
Решение задачи: «К последнему элементу второго массива прибавить первый элемент первого, к предпоследнему - прибавить второй элемент»
textual
Листинг программы
org 100h jmp start array1 dw 5,4,3,2,1 array2 dw 1,2,3,4,5 len = $-array2 ; длина массива(2) start: mov si,array1 ; SI = адрес начала первого массива mov di,array2 ; DI = начало второго mov cx,len ; CX = длина массива(2) в байтах add di,cx ; DI = конец второго массива shr cx,1 ; CX/2 = длина цикла для LOOP lp: lodsw ; AX = слово из SI (si сам увеличится на 2) add word[di],ax ; сложить со-значением из DI sub di,2 ; указатель влево loop lp ; промотать цикл СХ-раз.. ;--------------- ret ; выход в DOS!
Объяснение кода листинга программы
- org 100h — инициализация сегмента данных
- jmp start — переход к метке start
- array1 dw 5,4,3,2,1 - определение первого массива
- array2 dw 1,2,3,4,5 - определение второго массива
- len = $-array2 — вычисление длины массива (2)
- start: mov si,array1 — перемещение указателя на начало первого массива
- mov di,array2 — перемещение указателя на начало второго массива
- mov cx,len — установка счётчика (2)
- add di,cx — перемещение указателя на конец второго массива
- shr cx,1 — установка счётчика (2)
- lp: lodsw — загрузка слова из первого массива
- add word[di],ax — прибавление значения из второго массива
- sub di,2 - перемещение указателя влево
- loop lp — начало цикла
- ret — выход в DOS!