Цифровые устройства и микропроцессорные системы. Задачи и упражнения: Учебное пособие (Представление чисел и арифметические операции в цифровых устройствах. Микропроцессорные устройства и системы на базе МП КР580ВМ80), страница 101

Программа:

LХІ      В,ХХFFН                                ;3агрузка указателей

LХІ      Н,YYFFН                               ;конечных адресов

LХІ      D,ZZFFН                                ;массивов X, Y, Z

ADRESS:        LDAX В                                             ;Чтение элемента массива Z

АNА    М                                            ;Выполнение операции (А)¬Хi ÙYi;

;для задачи ÙY следует выполнить

;команды СМА и ;АNА М, а для задачи ;ХÅY команду ХRА М

SТАХ  D                                             ;Пересылка результата в ячейку ЗУ

;c адресом указателя (DЕ)

DСХ    D                                             ;Изменение текущих

DСХ    Н                                             ;адресов элеменгов

DСХ    В                                             ;массивов

МОV   А,С                                          ;Подготовка приАDІ     00Н                                         ;знака для проверки окончания цикла

INZ      АDRЕSS                                 ;Проверка условия и переход

НLТ                                                    ;Останов

Р8.40. В качестве указателя адресов массивов используем регистровую пару (НL), а счетчик организуем в РОН С. Алгоритм решения задачи приведен на рис. Р8.11.

Программа:

МVІ    С,Н                              ;(С) = N

LХІ      Н, ВАSЕ                     ;Начальный адрес в иаре (НL)

АDR1:             МОV   А,М                             ;Пересылка в А элемента из ячейки ЗУ с адресом,

;записанным в (НL)

СРІ      00Н                             ;Установка признака, проверка условия

JZ        АDR2                          ;и переход по метке

МОV   А,С                              ;Установка признака конца

СРІ      01Н                             ;массива

JZ        АDRЗ                          ;При (2) = 0 переход по метке

DСR    С                                 ;Счет в (С)

INХ     Н                                 ;Модификация указателя

JМР     АDR1                          ;Безусловный переход по метке

ADR2:             МОV   А,С                              ;(А)Ù(С)

OUТ    ОРОRТ                       ;Вывод номера элемента из (А) в порт с

;символическим адресом ОРОRТ

АDR3:             НLТ

Примечание. Для поиска номера самого первого элемента. содержащего все единицы, или любого другого кода следует в команде СРІ записать соотвртствующий операнд.

Рис. Р8.11. алгоритм выделения номера первого нулевого элемента массива

Р8.41. Алгоритм решения задачи совпадает с алгоритмом на рис. Р8.11 из задачи 8.40 при внесении следующих изменений:

1) В блоке 2 необходимо занести не начальный, а конечный адрес массива, т. е. символический адрес последнего элемента массива АDRN  = ВАSЕ + N;

2) в блоке 8 — модификация указателя  адреса — следует не увеличивать указатель, а уменьшать указатель: (НL) ¬ (НL) — 1;

3) в блоке 4 сравнивать код в аккумуляторе не с 0, а с FFН  возможно, с любым другим заданным  в задаче кодом.

Программа:

MVI                C,N

LXI                  H,ADRN

ADR1:             MOV               A,M

CPI                  FFH

JZ                    ADR2

MOV               A,C     

CPI                  01H

JZ                    ADR3

DCR                C

DCX                H

ADR2:             JMP                 ADR1

MOV               A,C

OUT                OPORT

ADR3:             HLT

Р8.42. Очередь представляет собой массив, в котором новые элементы можно включать только с конца очереди, а исключать только с начала очереди (в отличие от массива типа «стек», где реализуется принцип «первый приходит, последний уходит»,  в очереди реализуется принцип «первый приходит, первый уходит»).

Для организации очереди вводятся два указателя: указатель начала очереди, который адресует элемент очереди, подлежащий выходу (исключению), и указатель конца очереди, который адресует последний элемент очереди. Для выхода из очереди считывается элемент, адресуемый указателем, и затем производится увеличение на единицу (инкремент) указателя начала, т.е. очередь как бы растет «вниз» — в сторону больших адресов.