Одновекторные системы прерываний. Восьмивекторные системы пре­рываний, страница 2

PUSH     H

PUSH     D

PUSH     B

IN           CSbd               ; A ← xxxx xA2A1A0 –чтение номера I/O запросившего обслуживание

ANI        7                      ; A ← 0000 0A2A1A0 – выделение кода  A2A1A0 = m

CPI         1                      ; Сравнение кода A2A1A0 с числом 1

JZ           IO_1                ; Переход на обслуживание I/O -1

JC          IO_0                ; Переход на обслуживание I/O -0

CPI         3                      ; Сравнение кода A2A1A0 с числом 3

JZ          IO_3                ; Переход на обслуживание I/O-3

JC          IO_2                ; Переход на обслуживание I/О-2

СРI        5                      ; Сравнение кода A2A1A0  с числом 5

JZ          IО_5                ; Переход на обслуживание I/O-5

JC          IО_4                ; Переход на обслуживание I/O-4

CPI        6                      ; Сравнение кода A2A1A0 с числом 6

JZ          IO_6                ; Переход на обслуживание I/O-6

; Начало подпрограммы обслуживания I/O-7

OUT      Reset _IR7      ; Сброс запроса прерывания от I/O-7 (сигнал I/OW&CSI7 = 0)

JMP       ENDRST        ; Конец подпрограммы обслуживания I/O-7

IO_0:                                      ; Начало подпрограммы обслуживания //О-О

OUT      Reset_IR0       ; Сброс запроса прерывания от I/О-0

JMP       ENDRST        ; Конец подпрограммы обслуживания I/О-0

IO_1:                                      ; и т. д.

IO_6

ENDRST:   POP    В              ; Восстановление состояния прерванной программы

POP       D

POP       Н

POP       PSW

EI                                  ; Разрешение прерываний (INTE ← 1)

RET                              ; Возврат в прерванную программу

Прервать эту подпрограмму до ее завершения другие внешние устройства не в состоянии, так как команда разрешения прерываний EI находится в самом конце подпрограммы.

Для определения адресов переходов на программы обслуживания I/О — m удобно использо­вать косвенно-регистровый метод адресации переходов (см. § 1.7). Пример 2:

; Начало подпрограммы обработки прерывания RST 7 с адресом вызова 7 х 8 = 56d = 38h

PUSH  PSW               ; Сохранение в стеке состояния прерванной программы

PUSH  Н

PUSH  D

PUSH  В

IN        CSbd               ; А ← хххх xA2A1A0  — чтение номера I/О -m, пославшего запрос

AN1    7                      ; А ← 0000 0A2A1A0  — выделение кода A2A1A0  = m

LXI     H, Addr_t       ; HL ← Addr_t (начальный адрес таблицы адресов

MVI    D, 0                 ;                                       передачи управления)

ADD   А                     ; А ← m х 2

MOV  Е, А                ; DE = m х 2

DAD   D                     ; HL ← Addr_t + (m x 2)

MOV  A, M

INX     H

MOV  H, M

MOV  L, A                ; HL = Addr_m

PCHL                         ; PC ← Addr_m (переход на обслуживание I/О - m, где m =    A2A1A0)

 Addr_t           Addr_t            ; Таблица адресов переходов: Addr_m — двухбайтовый адрес

 Addr_t+ 2      Addr_1           ;       передачи управления подпрограмме обслуживания

Addr_t + 4      Addr_2           ;       внешнего устройства I/О - m (m = 0 ... 7)

Addr_t + 6      Addr_3

Addr_t + 8      Addr_4           ;Передача управления подпрограмме обслуживания

Addr_t  + А    Addr_5           ;внешнего устройства I/O – m осуществляется с помощью

Addr_t  + С    Addr_6           ;           косвенно-регистрового метода адресации переходов

Addr_t + Е      Addr_7

В этой подпрограмме используется таблица для восьми адресов переходов Addr_m и вычисление конкретного ад­реса таблицы для загрузки из нее адреса перехода в программный счетчик PC. Если при отладке программы адреса переходов изменятся или потребуется перенести подпрограммы обслуживания прерываний в другое место памяти, то достаточно будет изменить только таблицу адресов.

Рис. 2.14. Восьмивекторная система прерываний

Восьмивекторные системы пре­рываний. На рис 2.14 показана структурная схема МП - системы с восьмивекторным обслуживанием по прерыванию внешних устройств I/О - m (m = 0...7). Отличие этой системы прерываний от предыдущей   заключается    в   том,   что здесь производится чтение команд RST n из элементарного контроллера прерываний, выпол­ненного на ИС 555ИВ1 и 1533АП12. Машинный код llxxxlll команд RST n формируется шинным драйвером 1533АП12. В ответ на групповой запрос прерывания GS = 1 (при INTE = 1) МП выдает в системный контроллер 8238 слово состояния SW8,10 = 0010x011 (см. табл. 1.15), по которому вырабатывается сигнал  = ך_, производящий чтение шинного драйвера BD (безадресное чтение команд из внешнего устройства — контроллера прерываний).

 Таким образом, ввод-вывод по прерыванию определяется схемой:

          =>  INTE  (аппаратное квитирование ввода-вывода)

Im => GS ∫

                  =>  SW8,10  =>  = ך_  =>  RST n  =>  ППОП по адресу addr  = 8 x n