Определить количество элементов, больших среднего арифметического - Assembler

Узнай цену своей работы

Формулировка задачи:

Дан массив размерностью 10 элементов типа dw. Определить количество элементов, больших среднего арифметического.

Решение задачи: «Определить количество элементов, больших среднего арифметического»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
 
    A   dw  100, 123, 234, 456, 567, 678, 789, 890, 901, 999
    N   dw  10
    Count   dw  0
    CrLf    db  0Dh, 0Ah, '$'
 
.code
 
main    proc
    mov ax,     @data
    mov ds, ax
 
    ;вычисление среднего арифметического
    lea si, [A]
    mov cx, N
    mov ax, 0   ;(dx:ax) - сумма элементов массива
    mov dx, 0
@@Average:
    add ax, [si]
    adc dx, 0
    add si, 2
    loop    @@Average
    idiv    N
    ;т.к. нужно искать больше среднего, то
    ;придётся учесть случай наличия отстатка
    ;если остатка нет, то нужно искать числа на 1 больше частного,
    ;а если остаток есть - то достаточно искать больше частного
    cmp dx, 0
    jnz @@PresentRemainder
    inc ax
@@PresentRemainder:
 
    ;подсчёт количества элементов массива, больших среднего арифметического
    lea si, [A]
    mov cx, N
    mov bx, 0   ;количество элементов массива, больших среднего
@@Count:
    cmp ax, [si]
    adc bx, 0
    add si, 2
    loop    @@Count
    mov Count,  bx
 
    mov ax, 4C00h
    int 21h
main    endp
 
end main

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

  1. Объявление и инициализация переменных:
    • A - массив слов (2-байтовые целые числа) со значениями 100, 123, 234, 456, 567, 678, 789, 890, 901, 999
    • N - количество элементов массива (значение 10)
    • Count - количество элементов массива, больших среднего арифметического (значение в начале равно 0)
    • CrLf - массив байтов для новой строки (символ перевода строки)
  2. Вычисление среднего арифметического:
    • Используется цикл, в котором вычисляется сумма элементов массива A
    • Сумма сохраняется в регистрах ax и dx
    • Среднее арифметическое вычисляется с помощью операции деления idiv на значение N
    • Особенностью является учет возможного остатка от деления, который влияет на условие поиска строкой cmp dx, 0 и последующие инструкции
  3. Подсчет количества элементов массива, больших среднего арифметического:
    • Используется цикл сравнения каждого элемента массива A со средним арифметическим
    • При нахождении элемента большего, чем среднее арифметическое, увеличивается значение Count на 1
    • Результат сохраняется в переменной Count
  4. Завершение программы:
    • Устанавливается код завершения (4C00h)
    • Вызывается прерывание 21h для завершения программы Общий результат - программа вычисляет среднее арифметическое элементов массива A и определяет количество элементов массива, которые превышают это значение, сохраняя результат в переменной Count.

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

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