Найти элемент массива, имеющий максимальное абсолютное значение - Assembler
Формулировка задачи:
Найти элемент массива, имеющий максимальное абсолютное значение, и
записать в RgCX(формат элементов массива - байт).
Решение задачи: «Найти элемент массива, имеющий максимальное абсолютное значение»
textual
Листинг программы
- LOCALS
- .model small
- .stack 100h
- .data
- A db -4, 10, -100, 50, 80, 111, -112, 120, -128
- Len dw $-A
- Max db ?
- .code
- main proc
- mov ax, @data
- mov ds, ax
- mov cx, Len
- lea si, A
- mov bh, 0 ;текущее абсолютное значение максимума
- mov bl, 0 ;значение элемента с максимальным модулем
- @@For:
- ;загрузить значение элемента
- mov al, [si] ;значение элемента
- mov ah, al ;модуль значения элемента
- ;взятие модуля (абсолютного значения)
- or ah, ah
- jns @@Positive
- neg ah
- @@Positive:
- ;выбор максимума
- cmp ah, bh
- jbe @@Next
- mov bx, ax ;запоминание нового максимума
- @@Next:
- ;переход к следующему элементу
- add si, 1
- loop @@For
- ;расширение байта до слова
- mov al, bl
- cbw
- ;сохранение результата в регистре CX
- mov cx, ax
- mov ax, 4C00h
- int 21h
- main endp
- end main
Объяснение кода листинга программы
A
- массив элементов: -4, 10, -100, 50, 80, 111, -112, 120, -128Len
- длина массива, вычисляемая как разница между текущим адресом и началом массиваMax
- переменная, в которой будет храниться результат (максимальное по модулю значение) Код выполняет следующие операции:- Загрузка адреса данных
- Установка регистра данных
ds
равным адресу данных - Инициализация счетчика элементов
cx
значениемLen
- Загрузка адреса массива
A
в регистрsi
- Установка переменных
bh
иbl
в 0 (текущее абсолютное значение максимума и значение элемента с максимальным модулем соответственно) - Цикл для обхода массива и нахождения элемента с максимальным модулем
- Загрузка значения элемента
- Вычисление модуля значения элемента
- Сравнение модуля с текущим максимумом и сохранение нового максимума, если необходимо
- Переход к следующему элементу массива
- Проверка условия завершения цикла и повторение, если не все элементы обработаны
- Расширение байта до слова
- Сохранение результата в регистре
cx
- Завершение программы
Код ищет элемент в массиве, имеющий максимальное по модулю значение, и сохраняет его в регистре
cx
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д