
Лабораторная работа
Тема: Программные прерывания в микропроцессоре і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.