Среднее арифметическое значение элементов массива - Assembler
Формулировка задачи:
В заданном массиве A(N) необходимо вычислить среднее арифметическое значение элемента массива.
Решение задачи: «Среднее арифметическое значение элементов массива»
textual
Листинг программы
LOCALS .model small .stack 100h .data N equ 15 A dw 12, 150, 456, 4545, 121, 789, 687, 44, 89, 457, 987, 454, 1212, 654, 789 .code main proc mov ax, @data mov ds, ax lea si, [A] mov cx, N mov ax, 0 ;(dx:ax) - сумма mov dx, 0 @@For: add ax, [si] adc dx, 0 add si, 2 loop @@For mov bx, N div bx mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
- Объявляем имя переменной
Nс помощью директивыequи присваиваем ей значение 15. - Объявляем массив
Aс помощью директивыdwи инициализируем его следующими значениями: 12, 150, 456, 4545, 121, 789, 687, 44, 89, 457, 987, 454, 1212, 654, 789. - Объявляем начало процедуры
main. - Загружаем значение сегмента данных (отмеченного меткой
@data) в регистрaxс помощью командыmov. - Загружаем регистр данных (отмеченного меткой
@data) в регистрdsс помощью командыmov. - Загружаем адрес начала массива
Aв регистрsiс помощью командыlea. - Загружаем значение переменной
Nв регистрcxс помощью командыmov. - Инициализируем регистры
axиdxнулевыми значениями:mov ax, 0иmov dx, 0. Эти регистры будут использоваться для хранения суммы элементов массива. - Переходим к метке
@@For, которая будет использоваться в цикле. - Добавляем значение, хранящееся по адресу, на который указывает регистр
si, в регистрaxс помощью командыadd. - Добавляем нулевое значение в регистр
dxс помощью командыadc. - Увеличиваем регистр
siна размер элемента массива (2 байта) с помощью командыadd. - Уменьшаем значение в регистре
cxна 1 с помощью командыloop, чтобы продолжить цикл до тех пор, пока не достигнуто значение 0. - Делим сумму элементов массива, хранящуюся в регистрах
dx:ax, на значение переменнойNс помощью командыdiv bx. Результат будет храниться в регистреax. - Устанавливаем значение 4C00h (код завершения программы) в регистр
axс помощью командыmov. - Вызываем прерывание 21h для завершения программы.