Найти максимумы в одномерном массиве - 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
Объяснение кода листинга программы
- Создание переменной
A
типаdw
и присвоение ей значения массива целых чисел123, 555, 77, 555, 6565, 841, 22, 6565, 6565, 12, 6565, 1
- Создание переменной
Len
типаdw
и вычисление её значения как размер массиваA
деленного на 2. - Переход в сегмент данных и копирование его в регистр
ds
. - Инициализация регистра счетчика
cx
значениемLen
. - Загрузка адреса массива
A
в регистрsi
. - Получение значения первого элемента массива и сохранение его в регистр
ax
(текущий максимум). - Цикл поиска максимума в массиве и, если значение текущего элемента больше, чем текущий максимум, сохранение нового максимума.
- Переход к следующему элементу массива.
- Повторение шагов 6-8, пока не будет пройден весь массив.
- Возврат к началу массива и замена всех элементов равных максимальному на значение максимума.
- Переход к следующему элементу массива.
- Повторение процесса замены для всех элементов массива.
- Установление значения регистра
ax
как4C00h
для успешного завершения программы. - Вызов прерывания
21h
, завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д