Найти элемент массива, имеющий максимальное абсолютное значение - 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

Объяснение кода листинга программы

  1. A - массив элементов: -4, 10, -100, 50, 80, 111, -112, 120, -128
  2. Len - длина массива, вычисляемая как разница между текущим адресом и началом массива
  3. Max - переменная, в которой будет храниться результат (максимальное по модулю значение) Код выполняет следующие операции:
  4. Загрузка адреса данных
  5. Установка регистра данных ds равным адресу данных
  6. Инициализация счетчика элементов cx значением Len
  7. Загрузка адреса массива A в регистр si
  8. Установка переменных bh и bl в 0 (текущее абсолютное значение максимума и значение элемента с максимальным модулем соответственно)
  9. Цикл для обхода массива и нахождения элемента с максимальным модулем
    1. Загрузка значения элемента
    2. Вычисление модуля значения элемента
    3. Сравнение модуля с текущим максимумом и сохранение нового максимума, если необходимо
    4. Переход к следующему элементу массива
    5. Проверка условия завершения цикла и повторение, если не все элементы обработаны
  10. Расширение байта до слова
  11. Сохранение результата в регистре cx
  12. Завершение программы Код ищет элемент в массиве, имеющий максимальное по модулю значение, и сохраняет его в регистре cx.

Оцени полезность:

15   голосов , оценка 4.067 из 5
Похожие ответы