Канальный кипящий графитовый реактор Реакторы водо-водяного типа Реакторы на быстрых нейтронах Промышленные реакторы Исследовательские ядерные реакторы Реакторы третьего поколения ВВЭР-1500 Задачи по физике ядра

Работа микропроцессора при выполнении программного прерывания

Программы-обработчики прерываний могут находиться в различных частях основной памяти (место их расположения в разных версиях операционной системы может быть различным). Для обеспечения совместимости программ под разными версиями DOS обращение к обработчикам прерываний осуществляется по их номерам.

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

Поскольку адрес любого байта основной памяти определяется базовым адресом сегмента (2 байта) и смещением в сегменте (2 байта), вектор прерываний разделен на четверки байтов, имеющие структуру, показанную на рис.5.7.

1байт

2 байта

3 байта

4 байта

Смещение

Сегмеит

Рис. 5.7. Структура записи в векторе прерываний

Для получения адреса обработчика прерывания № nh необходимо:

·          по номеру прерывания определить адрес первого байта “четверки” в векторе прерываний (он равен п*4);

·          выбрать 4 байта из 0 сегмента основной памяти, начиная с байта 4nh;

·          два последних байта поместить в регистр CS;

·          два первых байта поместить в счетчик команд IP.

После этого начнет выполняться первая команда обработчика прерывания № nh.

Таблица векторов прерываний используется не только для хранения адресов обработчиков прерываний, но и для указания на места хранения в ОП служебной информации. Для этой цели служат векторы прерываний IDh, lEh, IFh, 41h, 43h, 46h, 4Ah. Так, вектор IDh содержит адрес таблицы параметров видеосистемы (а не обработчика прерывания); вектор lEh - таблицы параметров дискет; 1Fh - адрес знакогенератора адаптера CGA и т.д.

Команда ЮТ, кроме определения адреса обработчика прерывания, выполняет следующие действия:

• сохраняет в стеке часть слова состояния процессора:

(SP) <— (SP)-2

(вершина стека) <—— (регистр флагов)

(SP) <—— (SP)-2

(вершина стека) <—— (CS)

(SP) <—— (SP) – 2

(вершина стека) <—— (IP)

• сбрасывает флаги разрешения прерывания и трассировки:

(IF) <—— О

(TF) <—— О

• заносит адрес точки входа обработчика прерываний в регистры CS и IP:

(CS) <—— (номер_прерывания * 4 + 2)

(IP) <—— (номер_прерывания * 4)

Команда INT относится к парным командам - каждый обработчик прерывания заканчивается командой IRET (возврат из прерывания).

По команде IRЕТ (без параметров) выполняются следующие действия:

(IP) <—— (вершина стека)

(SP) <—— (SP)+2

(CS) <—— (вершина стека)

(SP) <—— (SP)+2

(регистр флагов) <—— (вершина стека)

(SP) <—— (SP)+2

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

Например, по команде INT 13h могут быть выполнены следующие функции:

00h - сброс дисковой системы;

0lh - определение состояния дисковой системы (успешное завершение, некорректная команда, не найдена адресная метка и т.д.);

02h - чтение секторов в основную память;

03h - запись секторов из основной памяти;

04h - контроль секторов (есть ошибка - нет ошибки);

05h- форматирование дорожки;

06h - для жесткого диска - форматирование дорожки с установкой флагов плохих секторов;

07h - для жесткого диска - форматирование диска, начиная с указанной

дорожки;

08h - определение типа и текущих параметров диска...

и т.д.

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

При выполнении команды INT номер функции должен содержаться в регистре АН микропроцессора. Остальные регистры должны включать необходимые для этой функции параметры. Например, для функции 02h остальные регистры микропроцессора должны содержать:

AL - число читаемых секторов;

СН - номер дорожки, на которой расположены читаемые сектора;

CL - номер сектора;

DH - номер головки;

DL - номер дисковода;

ES:BX - адрес буфера для чтения.

В результате выполнения этой функции при возникновении ошибки флаг CF устанавливается в 1; в регистр AL заносится число считанных секторов, в регистр АН записывается код состояния, сформированный после окончания операции:

00 - успешное завершение;

01 - некорректная команда;

02 - адресная метка не найдена;

FF - сбой операции опроса (для жесткого диска).

Кроме команд INT и IRET в IBM PC, с прерываниями работают команды CLI (запрещение маскируемых прерываний) и STI (отмена запрета прерывания).


На главную