Сложить два массива: найти ошибку - Assembler
Формулировка задачи:
text segment
;назначение сегментных регистров
assume CS:text, DS:data, SS:stk
stk segment stack
db 256 dup(0)
stk ends
data segment ;начало сегмента данных
m1 db 11h,3h,4h,5h,6h ;исходный массив
m2 db 9h,4h,3h,5h,4h ;исходный массив
m3 db 5 dup(0) ;массив сумм
data ends
;начало сегмента программного кода
begin:
;Установка сегментных регистров DS, ES, SS
mov AX,data ;Обращение к массивам
mov DS,AX
mov ES,AX
lea si, m1
lea bx, m2
lea di, m3
mov cx, 5
M5:
lodsb ;загрузить первый байт из массива m1 в al
ADD al,[bx] ;сложить с элементом из массива m2
DAA
stosb ; приемник,отправлять сумму в массив m3
inc bx ;увеличить значение в bx на 1
loop M5
mov ax, 4c00h
int 21h ; Вывести на экран массив m3
text ends
end beginРешение задачи: «Сложить два массива: найти ошибку»
textual
Листинг программы
mov AX,data ;помещаем адрес начала сегмента данных в регистр ax, чтобы далее переслать этот адрес в ;сегментные регистры ds и es. регистр ax выступает здесь посредником, т.к. напрямую нельзя записывать в ;сегментные регистры непосредственное значение. mov DS,AX ;помещаем адрес начала сегмента данных в сегментный регистр ds mov ES,AX ;помещаем адрес начала сегмента данных в сегментный регистр es lea si, m1 ;загружаем эффективный адрес начала первого массива в регистр si lea bx, m2 ;загружаем эффективный адрес начала второго массива в регистр bx lea di, m3 ;загружаем эффективный адрес начала результирующего массива в регистр di mov cx,5 ;в регистр cx помещается количество проходов цикла, каждый проход складывает элементы ;двух массивов с ;одинаковыми индексами и кладет результат в результирующий массив по тому же индексу.
Объяснение кода листинга программы
- mov AX,data — в регистр AX помещается адрес начала сегмента данных.
- mov DS,AX — в сегментный регистр DS помещается адрес начала сегмента данных.
- mov ES,AX — в сегментный регистр ES помещается адрес начала сегмента данных.
- lea si, m1 — в регистр SI загружается эффективный адрес начала первого массива.
- lea bx, m2 — в регистр BX загружается эффективный адрес начала второго массива.
- lea di, m3 — в регистр DI загружается эффективный адрес начала результирующего массива.
- mov cx,5 — в регистр CX помещается количество проходов цикла, равное 5.
- Далее, в зависимости от значения CX, происходит пять проходов цикла, в ходе которых элементы двух массивов суммируются и записываются в результирующий массив.