Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lectures / 16-17

.pdf
Скачиваний:
43
Добавлен:
16.04.2013
Размер:
416.05 Кб
Скачать

Программно-управляемый ввод/вывод

Передача команды чтения

CPU

I\O

 

модулю ввода/вывода

 

 

 

Прочитать биты состояния

I\O

CPU

 

из порта состояния УВВ

 

 

 

Нет

УВВ

 

 

 

готово к передаче?

 

 

 

Да

 

 

 

Прочитать данные из

I\O

CPU

 

регистра данных УВВ

 

 

Нет

Приняты

 

 

 

 

 

 

все данные?

 

 

 

Да

 

 

Пример: порт состояния принтера

(LPT1)

Пример: порт управления принтера

(LPT1)

(Command Register)

Пример: вывод символа на принтер

; Ожидание готовности

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

dx, 379h

;dx <-- № порта состояния

m1:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

in

al, dx

;al <-- содержимое порта состояния

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

test

al, 10000000b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

jz

m1

;цикл, пока бит 7 =0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

; Запись данных в регистр данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

dx, 378h

;dx <-- № порта данных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

al, char

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

out

dx, al

;записать символ в порт данных

; Команда “записать”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

mov

dx, 37Ah

;dx <-- № порта управления

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

in

al, dx

;al <-- содержимое порта управления

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

or

al, 1

;младший бит в “1”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

out

dx, al

;строб = 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

and

al, 0FEh

;младший бит в “0”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

out

dx, al

;строб = 0

Ввод/вывод, управляемый прерываниями

 

 

 

 

 

 

 

 

CPU I\O

Передача команды

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнение

чтения модулю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

других действий

ввода/вывода

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Прочитать данные из

 

 

 

 

 

 

 

 

 

 

 

 

 

Прерывание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

регистра данных УВВ

 

 

 

 

 

 

 

I\O CPU

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

Приняты

 

 

все данные?

 

Да

Выполнение программы и обработчика

прерываний (ISR - Interrupt Service Routine)

Программа

Обработчик

 

прерывания (ISR)

 

2

INTR

3

1

4

iret

ISR (Interrupt

Service Routine)

Виды прерываний

Программные прерывания

осуществляются командой

int <номер_прерывания>

Исключения

генерируются внутри процессора в ответ на исключительные ситуации (деление на ноль, недопустимый КОП и т.п.)

Аппаратные прерывания

вызываются внешними по отношению к процессору событиями, связанными с аппаратурой

Виды прерываний

 

 

 

 

 

Вид

 

Программное

Исключение

Аппаратное

прерывания:

 

прерывание

 

прерывание

 

 

 

 

 

 

 

 

 

 

Источник

 

Команда int

Ошибка в

Событие,

прерывания

 

 

программе

связанное с

 

 

 

аппаратурой

 

 

 

 

 

 

 

 

 

Тип

 

Внутренний

Внутренний

Внешний

источника

 

прерывания

 

 

 

 

 

 

 

 

 

Событие по

 

 

 

 

отношение к

 

Синхронное

Синхронное

Асинхронное

текущей

 

 

 

 

команде

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица векторов прерываний

Адрес

Память

 

 

 

0

 

IP ISR0

 

 

 

2

 

CS ISR0

 

 

 

4

 

IP ISR1

 

 

 

6

 

CS ISR1

 

 

 

 

 

...

 

 

 

4*i

 

IP ISRi

 

 

 

4*i+2

 

CS ISRi

 

 

 

 

 

...

 

 

 

4*255

 

IP ISR255

 

 

 

4*255+2

 

CS ISR255

 

 

 

Адрес

Обработчик

 

прерывания 0

 

ISR0

 

 

 

 

Адрес

 

 

Обработчик

 

ISR1

 

 

прерывания 1

 

 

 

 

Адрес

.

 

.

 

ISRi

 

.

 

 

 

 

 

 

Адрес

Обработчик

 

прерывания i

 

ISR255

 

 

 

 

 

 

 

...

 

Входы процессора для аппаратных

прерываний

NMI

if

INTR Процессор

NMI - внешние немаскируемые прерывания (для аварийных ситуаций)

INTR - внешние маскируемые прерывания

Соседние файлы в папке Lectures