Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВССиТ Лекция №12.doc
Скачиваний:
7
Добавлен:
27.08.2019
Размер:
3.08 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

метров видеосистемы (а не обработчика прерывания); вектор 1Eh - таблицы параметров дискет; 1Fh - адрес знакогенератора адаптера CGA и т.д.

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

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

(SP) <— (SP) – 2

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

(SP) <— (SP) – 2

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

(SP) <— (SP) – 2

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

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

(IF) <— О

(TF) <— О

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

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

Команда INT относится к парным командам - каждый обработчик пре­рывания заканчивается командой IRET (возврат из прерывания). По команде IRET (без параметров) выполняются следующие действия:

(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 (отмена запрета прерыва­ния).

1. Для чего необходима стековая память?

2. Как организована стековая память IBM PC?

3. Чем различаются стандарты XMS и EMS использования дополнитель­ной памяти IBM PC?

4. Каким образом определяется физический адрес ОП в реальном и в защищенном режимах?

5. Для чего необходим регистр флагов в исполнительном блоке МП?

6. Каким образом взаимодействуют узлы МП при выполнении арифме­тической команды?

7. Чем объясняется использование матричной организации ОП?

8. Каким образом заносится информация в постоянное ЗУ?

9. В каких случаях приходится сталкиваться с "вращением байтов" и чем оно объясняется?

10. Чем отличается память с выборкой по содержанию от памяти с про­извольным доступом?

11. С какой целью в ЭВМ реализован режим прерываний?

12. Какая информация включается в состав слова состояния процессора?

13. Какие действия выполняют команды, вызывающие программные пре­рывания?

14. В чем заключается подготовка ЦП к выполнению программного пре­рывания?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]