Найти минимальный и максимальный элементы одномерного массива - Assembler
Формулировка задачи:
Найти минимальный и максимальный элементы одномерного массива. Массив задать в сегменте данных или ввести с клавиатуры. Помогите плиззз. Желательно с небольшими коментариями.
Решение задачи: «Найти минимальный и максимальный элементы одномерного массива»
textual
Листинг программы
cseg segment assume cs:cseg,ds:cseg,es:cseg,ss:cseg org 100h start: mov di,offset array;адрес массива mov cx,l_arr ;число элементов массива dec cx ;число сравнений на 1 меньше push cx ;сохраним его mov bx,[di] ;примем за минимум 1 элемент mov ax,bx ;и за максимум тоже add di,2 ;di -> 2 элемент push di chkmin: cmp [di],bx ;след. элемент меньше минимального ? jge nomin ;нет, проверяем дальше mov bx,[di] ;да, поместим его в bx nomin: add di,2 ;di -> след. элемент loop chkmin ;повторить cx раз pop di ;di -> 2 элемент pop cx ;восстановим счетчик chkmax: cmp [di],ax ;след. элемент больше максимального ? jle nomax ;нет, проверяем дальше mov ax,[di] ;да, отправим его в ax nomax: add di,2 ;di -> след. элемент loop chkmax ;повторить cx раз ret array dw 2456,321,-12,876,55,14,8,625,-324,156 l_arr=($-array)/2 cseg ends end start
Объяснение кода листинга программы
Код на языке Assembler выполняет следующие действия:
- Подготовительные действия:
- В сегментном регистре di хранится адрес первого элемента массива.
- В регистре cx хранится общее количество элементов в массиве (используется для цикла).
- В регистре bx хранится текущий минимум.
- В регистре ax хранится текущий максимум.
- Цикл по всем элементам массива:
- Начинается с адреса первого элемента массива (di).
- Продолжается до тех пор, пока не будет выполнено условие цикла (cx > 0).
- На каждой итерации выполняется сравнение текущего элемента с текущим минимумом и максимумом.
- Если текущий элемент меньше текущего минимума, он становится новым минимумом.
- Если текущий элемент больше текущего максимума, он становится новым максимумом.
- После каждой итерации к di прибавляется 2, чтобы перейти к следующему элементу.
- После цикла:
- В регистре di хранится адрес последнего элемента массива.
- В регистре cx хранится 0 (цикл закончился).
- В регистре bx хранится минимум.
- В регистре ax хранится максимум.
- Возврат в вызывающую программу.