Нахождение максимума и минимума



Классическая задача нахождения максимума (или минимума) предполагает осуществление цикла по всем элементам массива. Сначала до входа в цикл максимальным (минимальным) объявляется самый первый элемент. Затем в цикле происходит сравнение с каждым текущим элементом массива. Если он больше (меньше) объявленного, то происходит обновление максимума (минимума) новым значением. Если нет, то цикл продолжается дальше без обновления. По окончании цикла в указанной ячейке находится максимальный (минимальный) элемент массива. При необходимости в операторе сравнения можно осуществлять сохранение в двух ячейках адреса максимума (минимума).

Найти максимальный элемент в таблице, содержащей байтовые числа. Таблица содержится в памяти программ, начиная с адреса TABL. Количество элементов в ней указано в R6. Максимальный элемент разместить в R7, а адрес этого элемента - в R4, R5.

Распределение ресурсов: Так как числа находятся в памяти программ, то необходимо использовать команду MOVC для пересылки числа в А.

NAME MAXX

Beg: mov dptr, #TABL  ;записать в указатель адреса первого числа в ПК

mov a, #0             ;обнуление АСС, чтобы "не мешал" при вычисления адреса

movc a, @a+dptr ;пересылка числа из ПК в АСС

mov r7,a      ;запись в регистр первого числа как временно наибольшего

mov r4, dph         ;запись в R4 и R5 временно адреса первого числа

mov r5, dpl             ;

inc dptr                 ;установка указателя на второе число

dec r6                    ;уменьшение счетчика чисел на 1

m1: mov a, #0      ;начало цикла.обнуление АСС, чтобы "не мешал" при вычисления адреса

movc a, @a+dptr ;пересылка числа из ПК в АСС

subb a, r7              ;выичитание текущего числа из временно максимального

jc m2                     ;переход, если есть перенос, т.е. число меньше, чем в R7

mov r7,a      ;сохранение числа, как нового максимального

mov r4,dph             ;сохранение его адреса в регистрах

mov r5, dpl          ;

m2: inc dptr                   ;увеличение адреса числа на 1

djnz r6, m1           ;проверка на 0 счетчика чисел и зацикливание

END

Найти минимальный элемент в таблице, содержащей байтовые числа. Таблица содержится в памяти данных, начиная с адреса TABL. Количество элементов в ней указано в R6. Минимальный элемент разместить в R6, а адрес этого элемента - в R2, R3.

Распределение ресурсов: Задача почти аналогична задаче 2.12.1.. Только числа находятся в памяти данных, поэтому необходимо использовать команду MOVХ для пересылки числа в А. И необходимо найти минимальный элемент.

NAME MINX

Beg: mov dptr, #TABL  ;записать в указатель адреса первого числа в ПК

movx a, @dptr     ;пересылка числа из ПД в АСС

mov r6,a      ;запись в регистр первого числа как временно наибольшего

mov r2, dph         ;запись в R2 и R3 временно адреса первого числа

mov r3, dpl             ;

inc dptr                 ;установка указателя на второе число

dec r5                    ;уменьшение счетчика чисел на 1

m1: movx a, @dptr       ;пересылка числа из ПД в АСС

subb a, r6              ;вычитание текущего числа из временно максимального

jnc m2                   ;переход, если нет переноса, т.е. число больше, чем в R6

mov r6,a      ;сохранение числа, как нового максимального

mov r2,dph          ;сохранение его адреса в регистрах

mov r3, dpl             ;

m2: inc dptr                   ;увеличение адреса числа на 1

djnz r5, m1           ;проверка на 0 счетчика чисел и зацикливание

END


Дата добавления: 2020-04-25; просмотров: 108; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!