Найти максимумы в одномерном массиве - 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
, завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д