001 org 10h ;адрес расположения исходных данных
002 db 32,12,54,33,55,01,34,55,99,17
004 org 70h ;адрес расположения кода
006 ;подготовка к поиску
007 mvi e,9 ;установка счетчика
008 mvi l,10h ;запись адреса 1 элемента массива
009 mov a,m ;запись в аккумулятор первого элемента массива
010 mov b,m ;примем его минимальным
011 mov c,l ;адрес минимального (сейчас - адрес первого)
013 ;поиск минимального элемента в массиве
014 min:
015 inr l ;следующий элемент массива
016 sub m ;отнимаем его от аккумулятора
017 jc yesmin ;если меньше 0, текущий элемент по-прежнему минимален
018 ;иначе принимаем минимальным очередной
019 mov a,m ;записываем его в аккумулятор
020 mov b,m ;в регистр с минимальным элементом
021 mov c,l ;адрес минимального
022 dcr e ;декремент счетчика
023 jnz min ;если не дошли до конца массива, повторяем
024 jz next ;если дошли до конца массива, идём дальше
026 yesmin:
027 add m ;возвращаем значение в аккумуляторе в исходный вид
028 dcr e ;декремент счетчика
029 jnz min ;если не дошли до конца массива, повторяем
031 ;подготовка к поиску
032 next:
033 push BC ;запись в стек минимального элемента и его адреса
034 mvi e,9 ;установка счетчика
035 mvi l,10h ;запись адреса 1 элемента массива
036 mov a,m ;запись в аккумулятор первого элемента массива
037 mov b,m ;примем его максимальным
038 mov c,l ;адрес максимального (сейчас - адрес первого)
040 ;поиск максимального элемента в массиве
041 max:
042 inr l ;следующий элемент массива
043 sub m ;отнимаем его от аккумулятора
044 jnc yesmax ;если больше 0, текущий элемент по-прежнему максимален
045 ;иначе принимаем максимальным очередной
046 mov a,m ;записываем его в аккумулятор
047 mov b,m ;в регистр с максимальным элементом
048 mov c,l ;адрес максимального
049 dcr e ;декремент счетчика
050 jnz max ;если не дошли до конца массива, повторяем
051 jz next2 ;если дошли до конца массива, идём дальше
053 yesmax:
054 add m ;возвращаем значение в аккумуляторе в исходный вид
055 dcr e ;декремент счетчика
056 jnz max ;если не дошли до конца массива, повторяем
058 ;замена элементов местами
059 next2:
060 pop DE ;достаем из стека минимальный элемент с его адресом
061 mov l,c ;адрес максимального элемента в HL
062 mov m,d ;записываем минимальный элемент по адресу максимального
063 mov l,e ;адрес минимального элемента в HL
064 mov m,b ;записываем максимальный элемент по адресу минимального
066 hlt