Найти максимумы в одномерном массиве - 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, завершение программы.