Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / пособие_m.doc
Скачиваний:
76
Добавлен:
10.05.2015
Размер:
484.35 Кб
Скачать

3.9.4 Команды возврата из подпрограмм

Каждая подпрограмма должна содержать команду возврата RET, которая возвращает управление вызывающей подпрограмме. Такая передача управления осуществляется путем извлечения из стека адреса возврата, включенного в стек командой CALL. Сама команда RET не содержит никакой адресной информации, неявно адресуя вершину стека.

В соответствии с типом команды вызова (Near или Far) имеются команды возврата двух типов - внутрисегментные и межсегментные. Команда NEAR RET реализует возврат внутри сегмента: адрес возврата извлекается из стека только в регистр EIP. Действия этой команды заключаются в том, что верхнее слово (или двойное слово) стека передается в регистр EIP, а содержимое регистра ESP увеличивается на 2 или 4. Команда FAR RET извлекает из стека адрес возврата в регистр CS и в регистр EIP.

4. Прерывания

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

- внешний сигнал по входу маскируемого или немаскируемого прерывания;

- аномальная ситуация, сложившаяся при выполнении конкретной команды и препятствующая нормальному продолжению программы;

- находящаяся в программе команда прерывания INT n.

Первая из указанных причин относится к аппаратным прерываниям, а две другие – к программным. Аппаратные прерывания по времени своего появления непредсказуемы и могут возникнуть в любой момент времени. С помощью аппаратных прерываний осуществляется взаимодействие процессора с периферийными устройствами (клавиатурой, дисками, таймером и т.д.). Реагируя на внешние прерывания, процессор должен идентифицировать его источник, сохранить минимальный контекст текущей программы и переключиться на выполнение специальной программы - обработчик прерываний. Действия обработчика прерываний, называемые обслуживанием прерывания, заключаются в том, чтобы правильно отреагировать на прерывание от конкретного источника: поместить символ с клавиатуры в буфер, считать сектор с диска, произвести инкремент системных часов и т.д. После обслуживания прерывания процессор должен возвратиться к прерванной программе так, как будто прерывания не было.

Программные прерывания, связанные с возникновением аномальных ситуаций, называются особыми случаями (exceptions). Такие случаи возникают, например, при нарушении защиты по привилегиям, превышении границы сегмента, выходе за границы массива, делении на нуль и т.д. Общая реакция процессора на особый случай аналогична представленной реакции на аппаратные прерывания: необходимо сохранить контекст программы, идентифицировать причину особого случая и переключиться на обработчик особого случая (exception handler).

Ниже представлены некоторые типы особых случаев.

Тип 0 – ошибка деления, происходит при переполнении результата деления или при попытке разделить на ноль.

Тип 2 – немаскируемое аппаратное прерывание – это результат наличия сигнала на входном выводе NMI микропроцессора.

Тип 4 – переполнение – при этом типе команда INTO прерывает программу и вызывает обработчик прерывания при условии, что флаг переполнения OF установлен.

Тип 6 – недействительный код операции – происходит при появлении в программе неопределенного кода операции.

Тип 8 – двойная ошибка – активизируется, если по одной и той же команде происходит два отдельных прерывания.

Тип 11 – сегмент отсутствует – этот особый случай происходит, когда бит P в дескрипторе указывает на то, что сегмент отсутствует в оперативной памяти.

Тип 13 – общая защита – происходит при большинстве случаев нарушениях защиты в защищенном режиме.

Соседние файлы в папке 12-12-2013_11-21-32