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

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

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

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

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

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       dw      123, 555, 77, 555, 6565, 841, 22, 6565, 6565, 12, 6565, 1
        Len     dw      ($-A)/2
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     cx,     Len
        lea     si,     [A]
        mov     ax,     [si]    ;текущее значение максимума
@@FindMax:
        mov     dx,     [si]
        cmp     ax,     dx
        sbb     bx,     bx
        and     dx,     bx
        not     bx
        and     ax,     bx
        or      ax,     dx
 
        add     si,     2
        loop    @@FindMax
 
        mov     cx,     Len
        lea     si,     [A]
@@ReplaceMax:
        cmp     ax,     [si]
        jne     @@Next
        mov     [si],   ax
@@Next:
        add     si,     2
        loop    @@ReplaceMax
 
        mov     ax,     4C00h
        int     21h
main    endp
 
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
Похожие ответы