Найти элемент массива, имеющий максимальное абсолютное значение - Assembler

Узнай цену своей работы

Формулировка задачи:

Найти элемент массива, имеющий максимальное абсолютное значение, и записать в RgCX(формат элементов массива - байт).

Решение задачи: «Найти элемент массива, имеющий максимальное абсолютное значение»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       db      -4, 10, -100, 50, 80, 111, -112, 120, -128
  9.         Len     dw      $-A
  10.         Max     db      ?
  11. .code
  12.  
  13. main    proc
  14.         mov     ax,     @data
  15.         mov     ds,     ax
  16.  
  17.         mov     cx,     Len
  18.         lea     si,     A
  19.         mov     bh,     0       ;текущее абсолютное значение максимума
  20.         mov     bl,     0       ;значение элемента с максимальным модулем
  21. @@For:
  22.         ;загрузить значение элемента
  23.         mov     al,     [si]    ;значение элемента
  24.         mov     ah,     al      ;модуль значения элемента
  25.         ;взятие модуля (абсолютного значения)
  26.         or      ah,     ah
  27.         jns     @@Positive
  28.         neg     ah
  29. @@Positive:
  30.         ;выбор максимума
  31.         cmp     ah,     bh
  32.         jbe     @@Next
  33.         mov     bx,     ax      ;запоминание нового максимума
  34. @@Next:
  35.         ;переход к следующему элементу
  36.         add     si,     1
  37.         loop    @@For
  38.  
  39.         ;расширение байта до слова
  40.         mov     al,     bl
  41.         cbw
  42.         ;сохранение результата в регистре CX
  43.         mov     cx,     ax
  44.  
  45.         mov     ax,     4C00h
  46.         int     21h
  47. main    endp
  48.  
  49. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы