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