Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №6.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
116.74 Кб
Скачать

Лабораторная работа

Тема: Программные прерывания в микропроцессоре і8086.

Цель работы: изучить систему прерываний микропроцессора і8086, научиться составлять программы с использованием системы прерываний.

Оборудование: персональный компьютер.

Программное обеспечение: операционная система, программа отладчик для микропроцессора і8086.

1. Общие положения.

Микропроцессор і8086 имеет эффективную систему прерываний, в которой каждому прерыванию поставлен в соответствие код (от 0 до 255), который идентифицирует тип прерывания. Прерывания могут инициироваться внешними устройствами (внешние прерывания) или командами программных прерываний.

Прерывание заставляет микропроцессор временно прекратить выполнение текущей программы и перейти к выполнению подпрограммы обработки прерывания, которая считается более важной или срочной в данный момент времени. Возобновление прерванной программы должно быть произведено так, будто прерывание отсутствовало. Для этого в стеке запоминается адрес возврата (CS и IP) и содержимое регистра флагов F, а также содержимое тех регистров, которые потребуются для выполнения подпрограммы обработки прерывания. Содержимое регистров CS, IP и F запоминается и восстанавливается автоматически, а для запоминания и последующего восстановления содержимого других регистров микропроцессора должны быть предусмотрены соответствующие команды в начале и конце подпрограммы обработки прерываний. Следует отметить, что в стек включается скорректированное содержимое указателя команд IP, соответствующее адресу команды, перед которой микропроцессор начал обслуживать прерывание. Необходимость коррекции вызвана тем, что IP адресует команды с опережением из-за существования внутренней очереди команд.

Прерывание, определяемое пользователем при составлении программы, осуществляется по двухбайтовой команде INT n, в которой тип прерывания указывается во втором байте команды. Команда INT n вызывает требуемую подпрограмму, как и команда CALL, однако при переходе на подпрограмму команда INT n осуществляет запоминание не только адреса возврата (CS и IP), но и регистра флагов F. При этом выполняется межсегментный переход, причем адрес подпрограммы располагается не в формате команды или в произвольной ячейке памяти, а в специально сформированной таблице.

Процедуры программных прерываний удобно применять в системах, где допускается динамическое перемещение программ (процедур) при их выполнении. Поскольку таблица указателей находится в фиксированной области памяти, процедуры могут вызывать друг друга через эту таблицу. Этим обеспечивается устойчивое взаимодействие, не зависящее от адресов процедур, если перемещение процедуры в памяти сопровождается соответствующей модификацией таблицы указателей.

Связь между кодом, определяющим тип прерывания, и подпрограммой (процедурой) обслуживания прерывания устанавливается с помощью специальной таблицы указателей векторов прерываний. Полная таблица занимает 1 Кбайт памяти и содержит 256 элементов, расположенных по адресам 0000h÷03FFh. Каждый элемент таблицы содержит два слова, определяющие начальный логический адрес подпрограммы. Слово с большим адресом содержит базовый адрес сегмента, а слово с меньшим адресом смещение подпрограммы от начала кодового сегмента. При переходе на подпрограмму смещение загружается в регистр IP, а адрес сегмента загружается в регистр CS. Так как размер каждого элемента таблицы составляет 4 байта, микропроцессор вычисляет адрес (смещение) требуемого элемента путем умножения типа прерывания на 4 (сдвигает число, тип прерывания, на 2 бита влево). Организация таблицы векторов прерываний показана на рисунке 1.

Несмотря на то, что обработчик прерывания по отношению к основной программе является подпрограммой с дальним вызовом невозможно применять для возврата из подпрограммы обработки прерывания команду RET как для дальнего вызова. Так как из стека кроме адреса возврата необходимо извлекать еще и регистр флагов F. Для этого используют команду IRET, по которой из стека извлекается адрес возврата в виде CS:IP и регистр флагов F.

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

Адрес

15

0

00000

Тип 0

IP

CS

00004

Тип 1

IP

CS

00008

Тип 2

IP

CS

0000С

Тип 3

IP

CS

00010

Тип 4

IP

CS

. . . . . . . . .

003FC

Тип 255

IP

CS

Рисунок 1. – Организация таблицы векторов прерываний в микропроцессоре і8086.