Напишите программу, которая выбирает из элементов заданного массива байтов максимальный элемент - Assembler
Формулировка задачи:
5. Напишите программу, которая выбирает из элементов заданного массива байтов максимальный элемент.
Решение задачи: «Напишите программу, которая выбирает из элементов заданного массива байтов максимальный элемент»
textual
Листинг программы
.MODEL small ;отводим под стек и под данные по 64Кб .STACK 100h ;отмечаем начало сегмента стека .DATA ;отмечаем начало сегмента данных A DW 5, 3, 9, 4, 5 ;описание массива из 5 элементов Max DW 0 ;описание переменной Max .CODE ;отмечаем начало сегмента кодов main PROC mov AX, @data ;копируем адрес mov DS, AX ;сегмента данных mov SI, OFFSET A ;заносим в SI начало массива А mov AX, [SI] mov Max, AX ;в Мах заносим первый элемент массива mov CX, 4 ;в СХ заносим количество итераций L1: inc SI ;сдвигаемся по массиву к следующему inc SI ;элементу mov AX,[SI] ;заносим в АХ текущий элемент массива cmp AX, Max ;сравниваем АХ с Мах jbe L2 ;если меньше или равно, переходим на L2 mov Max, AX ;иначе запоминаем новый максимум L2: loop L1 ;циклически повторяем все действия mov AX,4C00h ;выход int 21h ;из программы main ENDP END main
Объяснение кода листинга программы
- .MODEL small — данная команда устанавливает модель памяти, в которой будет выполняться программа. В данном случае модель памяти —
small
, что означает, что для данных и стека выделено по 64 Кб. - .STACK 100h — команда, которая определяет размер стека в 100 байт.
- .DATA — команда, которая определяет сегмент данных.
- A DW 5, 3, 9, 4, 5 — описание массива из 5 элементов.
- Max DW 0 — описание переменной Max.
- .CODE — команда, которая определяет сегмент кода.
- main PROC — процедура main, которая является точкой входа в программу.
- mov AX, @data — команда, которая копирует в регистр AX адрес сегмента данных.
- mov DS, AX — команда, которая связывает сегмент данных с регистром DS.
- mov SI, OFFSET A — команда, которая копирует в регистр SI адрес начала массива A.
- mov AX, [SI] — команда, которая загружает в регистр AX значение элемента массива, на который указывает регистр SI.
- mov Max, AX — команда, которая сохраняет в переменной Max значение регистра AX.
- mov CX, 4 — команда, которая загружает в регистр CX значение 4, которое будет использоваться как счётчик итераций.
- L1: inc SI — команда, которая увеличивает значение регистра SI на 1, чтобы перейти к следующему элементу массива.
- inc SI — команда, которая увеличивает значение регистра SI на 1, чтобы перейти к следующему элементу массива.
- mov AX,[SI] — команда, которая загружает в регистр AX значение элемента массива, на который указывает регистр SI.
- cmp AX, Max — команда, которая сравнивает значение регистра AX с значением переменной Max.
- jbe L2 — команда, которая выполняется, если значение регистра AX меньше или равно значению переменной Max. В этом случае программа переходит к блоку L2.
- mov Max, AX — команда, которая сохраняет в переменной Max новое максимальное значение.
- L2: loop L1 — команда, которая повторяет все действия, описанные в блоке L1.
- mov AX,4C00h — команда, которая устанавливает значение регистра AX равным 4C00h. Это значение используется для выхода из программы.
- int 21h — команда, которая вызывает прерывание 21h, что приводит к выходу из программы.
- main ENDP — завершающая команда процедуры main.
- END main — завершающая команда программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д