Найти максимумы в одномерном массиве - Assembler

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

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

Дан одномерный массив, найти в нем все максимумы (наибольший элемент), затем обнулить его. Размерность произвольная (5+).

Решение задачи: «Найти максимумы в одномерном массиве»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       dw      123, 555, 77, 555, 6565, 841, 22, 6565, 6565, 12, 6565, 1
  9.         Len     dw      ($-A)/2
  10. .code
  11.  
  12. main    proc
  13.         mov     ax,     @data
  14.         mov     ds,     ax
  15.  
  16.         mov     cx,     Len
  17.         lea     si,     [A]
  18.         mov     ax,     [si]    ;текущее значение максимума
  19. @@FindMax:
  20.         mov     dx,     [si]
  21.         cmp     ax,     dx
  22.         sbb     bx,     bx
  23.         and     dx,     bx
  24.         not     bx
  25.         and     ax,     bx
  26.         or      ax,     dx
  27.  
  28.         add     si,     2
  29.         loop    @@FindMax
  30.  
  31.         mov     cx,     Len
  32.         lea     si,     [A]
  33. @@ReplaceMax:
  34.         cmp     ax,     [si]
  35.         jne     @@Next
  36.         mov     [si],   ax
  37. @@Next:
  38.         add     si,     2
  39.         loop    @@ReplaceMax
  40.  
  41.         mov     ax,     4C00h
  42.         int     21h
  43. main    endp
  44.  
  45. end     main

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

  1. Создание переменной A типа dw и присвоение ей значения массива целых чисел 123, 555, 77, 555, 6565, 841, 22, 6565, 6565, 12, 6565, 1
  2. Создание переменной Len типа dw и вычисление её значения как размер массива A деленного на 2.
  3. Переход в сегмент данных и копирование его в регистр ds.
  4. Инициализация регистра счетчика cx значением Len.
  5. Загрузка адреса массива A в регистр si.
  6. Получение значения первого элемента массива и сохранение его в регистр ax (текущий максимум).
  7. Цикл поиска максимума в массиве и, если значение текущего элемента больше, чем текущий максимум, сохранение нового максимума.
  8. Переход к следующему элементу массива.
  9. Повторение шагов 6-8, пока не будет пройден весь массив.
  10. Возврат к началу массива и замена всех элементов равных максимальному на значение максимума.
  11. Переход к следующему элементу массива.
  12. Повторение процесса замены для всех элементов массива.
  13. Установление значения регистра ax как 4C00h для успешного завершения программы.
  14. Вызов прерывания 21h, завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

5   голосов , оценка 4.4 из 5

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

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

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