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

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

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

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

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

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.  
  9.     A   dw  100, 123, 234, 456, 567, 678, 789, 890, 901, 999
  10.     N   dw  10
  11.     Count   dw  0
  12.     CrLf    db  0Dh, 0Ah, '$'
  13.  
  14. .code
  15.  
  16. main    proc
  17.     mov ax,     @data
  18.     mov ds, ax
  19.  
  20.     ;вычисление среднего арифметического
  21.     lea si, [A]
  22.     mov cx, N
  23.     mov ax, 0   ;(dx:ax) - сумма элементов массива
  24.     mov dx, 0
  25. @@Average:
  26.     add ax, [si]
  27.     adc dx, 0
  28.     add si, 2
  29.     loop    @@Average
  30.     idiv    N
  31.     ;т.к. нужно искать больше среднего, то
  32.     ;придётся учесть случай наличия отстатка
  33.     ;если остатка нет, то нужно искать числа на 1 больше частного,
  34.     если остаток есть - то достаточно искать больше частного
  35.     cmp dx, 0
  36.     jnz @@PresentRemainder
  37.     inc ax
  38. @@PresentRemainder:
  39.  
  40.     ;подсчёт количества элементов массива, больших среднего арифметического
  41.     lea si, [A]
  42.     mov cx, N
  43.     mov bx, 0   ;количество элементов массива, больших среднего
  44. @@Count:
  45.     cmp ax, [si]
  46.     adc bx, 0
  47.     add si, 2
  48.     loop    @@Count
  49.     mov Count,  bx
  50.  
  51.     mov ax, 4C00h
  52.     int 21h
  53. main    endp
  54.  
  55. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы