Среднее арифметическое значение элементов массива - 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

Объяснение кода листинга программы

  1. Объявляем имя переменной N с помощью директивы equ и присваиваем ей значение 15.
  2. Объявляем массив A с помощью директивы dw и инициализируем его следующими значениями: 12, 150, 456, 4545, 121, 789, 687, 44, 89, 457, 987, 454, 1212, 654, 789.
  3. Объявляем начало процедуры main.
  4. Загружаем значение сегмента данных (отмеченного меткой @data) в регистр ax с помощью команды mov.
  5. Загружаем регистр данных (отмеченного меткой @data) в регистр ds с помощью команды mov.
  6. Загружаем адрес начала массива A в регистр si с помощью команды lea.
  7. Загружаем значение переменной N в регистр cx с помощью команды mov.
  8. Инициализируем регистры ax и dx нулевыми значениями: mov ax, 0 и mov dx, 0. Эти регистры будут использоваться для хранения суммы элементов массива.
  9. Переходим к метке @@For, которая будет использоваться в цикле.
  10. Добавляем значение, хранящееся по адресу, на который указывает регистр si, в регистр ax с помощью команды add.
  11. Добавляем нулевое значение в регистр dx с помощью команды adc.
  12. Увеличиваем регистр si на размер элемента массива (2 байта) с помощью команды add.
  13. Уменьшаем значение в регистре cx на 1 с помощью команды loop, чтобы продолжить цикл до тех пор, пока не достигнуто значение 0.
  14. Делим сумму элементов массива, хранящуюся в регистрах dx:ax, на значение переменной N с помощью команды div bx. Результат будет храниться в регистре ax.
  15. Устанавливаем значение 4C00h (код завершения программы) в регистр ax с помощью команды mov.
  16. Вызываем прерывание 21h для завершения программы.

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы