|
|
|
|
Передача данных методом прерываний данных
Передача данных методом прерываний данных используется, когда передача данных ведется асинхронно (то есть, время, отведенное
для передачи данных заранее не определяется). И такая передача
данных обычно происходит сравнительно не часто. Прерывание указывает на появление какого-либо внешнего события в процессоре, тре-
бование может вызываться каким-либо внешним по отношению к процессору устройством, часами (таймером) или какой-либо программой.
При наступлении прерывания процессор приостанавливает выполнение
текущей программы ("подвешивает" ее), считывает адрес сервисной
программы прерываний (программы ISR) из таблицы векторов прерываний и выполняет последнюю.
Основными функциями, выполняемыми сервисной программой ISR,
являются :
1. Разрешение прерываний таким образом, что могут обслуживаться прерывания более высоких приоритетов.
2. Сохранение регистров, которые будут использоваться программой ISR.
3. Выполнение функций обработки, связанных с прерыванием, как
можно быстрее.
4. Восстановление содержимого сохраненных регистров.
5. Выполнение команды IRET для возобновления выполнения прерванной программы.
Представленная ниже программа содержит структуру программы
ISR:
sti ; разрешить прерывания
push ax ; сохранить только те
push bx ; регистры, которые ис-
push cx ; пользуются программой
push dx ; ISR
.
.
.
mov ax,cs ; локальные данные, к ко-
; торым будет вестись об-
; ращение
mov ds,ax ; с использованием области
; DS
.
.
. ; обработать прерывания
pop dx ; восстановить регистры в
pop cx ; обратном порядке
pop bx ;
pop ax ;
iret ; возобновить выполнение
; прерванной программы
|
При появлении прерывания процессор сохраняет три слова (CS,
IP, флаги) и считывает два слова (адрес программы ISR). Таким образом, на обслуживание любого прерывания в процессоре 8088 затрачивается 71 цикл,
а в процессоре 8086 - 51 цикл. Не требуется дополнительных затрат на задание прерывания и его сброс, потому
что процесс обслуживания прерывания уже сбрасывает его (это называется "автоматическое завершение режима прерывания").
|
|