Мегаобучалка Главная | О нас | Обратная связь


Программные средства системы прерываний реального режима



2015-12-06 479 Обсуждений (0)
Программные средства системы прерываний реального режима 0.00 из 5.00 0 оценок




 

К программным средствам системы прерываний реального режима относятся:

1) таблица векторов прерываний. Она занимает первый килобайт ОП (адреса 00000h-003FFh), содержит адреса (векторы - «векторы», т.к. два значения для указания адреса) обработчиков прерываний и состоит из 256 (0..255) элементов по 4 байта каждый:

- 2 байта – новое значение для регистра IP;

- 2 байта – новое значение для регистра CS.

Расположение таблицы векторов прерываний в процессорах i80286 и старше определяется значением регистра IDTR. Таблица векторов прерываний инициализируется при запуске системы, но в принципе может быть изменена и перемещена.

Каждый вектор имеет свой номер и называется номером прерывания.

2) два флага в регистре флагов flags/eflags:

– IF (Interrupt Flag) – флаг прерывания. Предназначен для маскирования (запрещения) аппаратных прерываний. Если IF = 1, микропроцессор обрабатывает внешние прерывания, если = 0, то игнорирует;

– TF(Trace Flag) – флаг трассировки. Если он = 1, то микропроцессор переходит в режим покомандной работы. В этом режиме в микропроцессоре генерируется внутреннее прерывание с номером 1;

3) машинные команды микропроцессора: int, into (прерывание по переполнению), iret, cli, sti

3.4.2. Идеология организации прерываний в процессорах Intel 80х86

 

Сохраняется общая идеология организации прерываний в процессоре Intel 8086, которая касается следующих моментов:

1) использование таблицы векторов прерываний, содержащей 4-байтные указатели на обработчики прерываний различных типов;

2) сохранение в стеке минимального контекста прерываемой программы в виде трех слов (FLAGS, CS, IP) на аппаратном уровне;

3) аппаратный сброс флага IF при выходе на обработку прерываний.

3.4.3. Этапы обработки прерываний в реальном режиме процессоров Intel 80х86

Обработка прерывания в реальном режиме производится в три этапа:

1) прекращение выполнения текущей программы;

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

Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags - состояние флагов после выполнения последней команды прерванной программы). !!!Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров - должно обеспечиваться программистом !!!

Наиболее удобным местом хранения регистров является стек.

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

2) переход к выполнению и выполнение программы обработки прерывания;

Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания.

В реальном режиме микропроцессора допускается 256 источников - по количеству элементов таблицы векторов прерываний.

Структура элемента:

– 2 байта - значение смещения начала программы-обработчика прерывания от начала кодового сегмента

– 2 байта - значение базового адреса сегмента, в котором находится программа-обработчик.

ВОПРОС: Как определить адрес, по которому находится вектор прерывания с номером N?

ОТВЕТ: Смещение элемента таблицы векторов прерываний = N * 4.

Полный размер таблицы: 4*256=1024

Итак на втором этапе микропроцессор:

1. По номеру источника прерывания определяет смещение в таблице векторов прерываний

2. Помещает первые два байта в регистр IP

3. Помещает вторые два байта в регистр CS

4. Передает управление по адресу CS:IP.

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

(Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.)

3) возврат управления прерванной программе.

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

Последние команды в в обработчике прерывания - sti, iret.

sti - разрешить аппаратные прерывания (устанавливает флаг IF = 1, не имеет операндов).

iret - извлечь последовательно три слова из стека и поместить их соответственно в регистры ip, cs, flags.

 

3.4.4. Основные отличия обработки прерываний в R-режиме
по сравнению с базовой моделью Intel 8086

 

1. Увеличение числа зарезервированных типов прерываний. К новым типам прерываний в R-режиме относятся:

тип 5 – нарушение границы массива (источником прерывания является специальная команда BOUND – проверка границы);

тип 6 – некорректный код операции;

тип 7 – недоступный сопроцессор;

тип 8 – выход за пределы таблицы векторов прерываний;

тип 13 – выход адреса операнда или команды за пределы сегмента или превышение длины машинной команды максимального предела 15 байт (такое возможно только при некорректном использовании префиксов);

тип 16 – ошибка сопроцессора.

Имеет место при генерации одного из незамаскированных особых случаев математического сопроцессора или блока FPU (перечень особых случаев в разделе «Иерархия масок прерываний»).

2. Возможность обеспечения рестарта «виновной» команды после обработки прерываний. Это означает, что в качестве адреса возврата в стеке сохраняется именно адрес недовыполненной команды, а не следующей команды программы как в процессоре Intel 8086.

3. Использование для входа в таблицу векторов прерываний регистра IDTR. В реальном режиме базовый адрес этой таблицы инициализируется на начало памяти, т.е. равен нулю. Задаваемый в этом же регистре IDTR предел (limit) используется для проверки возможного выхода обращения за пределы таблицы (прерывание с типом 8).

 



2015-12-06 479 Обсуждений (0)
Программные средства системы прерываний реального режима 0.00 из 5.00 0 оценок









Обсуждение в статье: Программные средства системы прерываний реального режима

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (479)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.036 сек.)