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

Для включения в очередь элемент массива записывается в ячейку, адресуемую указателем конца очереди, и затем этот указатель увеличивается на единицу.

Чтобы можно было просто обнаружить особые случаи в организации очереди — попытки включить элемент в очередь, в которой все выделенные для массива ячейки памяти уже заполнены, или исключить элемент из пустой очереди, часто область памяти, выделяемую для очереди, размещают на одной странице ЗУ, т. е. у всех элементов очереди адреса отличаются только младшим байтом, а старший байт адреса у всех элементов один и тот же; при этом, естественно, можно реализовать очередь всего на N < 28 = 256 элементов.

Рис. Р8.12. Алгоритм включения элементов в очередь и исключение из нее

Р8.43. Алгоритм решения задачи приведен на рис. Р8.12. В качестве указателя адреса конца очереди выберем регистровую пару (НL), а указателя адреса элемента очереди при сдвиге — пару (DЕ). Счетчик длины очереди реализуем на регистре С, а вспомогательный счетчик для сдвига очереди — на регистре В. Предполагается, что исключение из очереди производится только из ячейки с начальным адресом ВА5Е. поэтому после выполнения операции исключения элемента из очереди производится «подъем» всех элементов очереди вверх (в направлении уменьшающихся адресов) на одну ступень.

Программа:

1                                              MVI    C,00H                          ;Загрузка счетчика длины очереди

2                                  LXI      M,ADRK=BASE        ;Инициализация указателя адреса пары

;(HL) текущего конца очереди RK=BASE

3          ADR1:             LDA    ADRPR1                     ;Чтение признака включения нового

;элемента в очередь: (А)¬х1

4                                  CPI      01H                             ;Анализ признака х1 – сравнение (А) – 01H

;и проверка условия (флаг Z): если (А) =

;= х1=011H, то переход к метке ADR5

;(блок 20)

5          ADR2:             LDA    ADRPR2                     ;Чтение признака исключения элемента из

;очереди (А)¬х2

6                                  CPI      01H                             ;Анализ признака х2 – сравнения (А) – 01H

;и переход по метке ADR1, если х2 ¹ 01H

7                                  LDA    BASE                          ;Чтение из ячейки ОЗУ с начальным

;адресом (А)¬([BASE])

8                                  OUT    PORT2                        ;Исключение первого элемента очереди в

;порт

;вывода (PORT2)¬(A)

9                                  MOV   B,C                              ;Подготовка к сдвигу элементов очереди:

;Загрузка вспомогательного счетчика

;(регистр В) значением длины очереди

;(С)

10                                LXI      D,BASE+1                  ;Инициализация вспомогательного

;указателя текущих адресов элементов

;очереди

11        ADR3:             LDAX D                                 ;Чтение из ячейки ОЗУ по адресу в паре

;(DE) (А)¬([DE])

12                                DCX    D                                 ;Модификация вспомогательного

;указателя (DE)¬(DE) – 1

13                                STAX  D                                 ;Сдвиг элемента «вверх»: чтение из (А) в

;ячейку ОЗУ с адресом в (DE)

14                                DCR    B                                 ;Счет во вспомогательном счетчике

15                                JZ        ADR4                          ;Проверка конца (завершения) сдвига всех

;элементов очереди «вверх» - по (В) ¹ 0

16                                INX     D                                 ;Если В¹0, то увеличение

17                                JMP     ADR3                          ;текущего адреса в (DE) на 02H и

;безусловный переход к метке ADR3

18        ADR4:             DCR    C                                 ;Если (В)=0, то восстана

19                                JMP     ADR1                          ;вливается значение длины

;очереди в (С) и безусловный переход к