Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
123
Добавлен:
02.06.2015
Размер:
1.57 Mб
Скачать

3. Стек. Вектора прерываний.

Стек

SS– адрес сегмента стека.

SP– указатель вершины стека

BP– основание стека. Используются только в момент загрузки программы. Это базовый регистр. Его также можно использовать для адресации.

ESиDSадреса сегментов данных.DSпо умолчанию.

DS:SIдляDS

ES:DIдляES

SIиDIмогут использоваться в качестве индексных регистров.

Стек заполняется со старших разрядов.

Работает по принципу LIFO. В стек можно записывать данные размером 2 байта.

При записи в стек содержимое SPуменьшается на 2 и по этому адресу записывается определенное значение в стек. При чтении данных из стека данные читаются, а затемSP:=SP+2. СистемаMS-DOSне следит за переполнением стека. Программист должен отслеживать это.

Переполнение происходит следующим образом: SP=0000 и записываем в стек, т.е.SP:=SP-2 и указатель стека будет равенFFFEи косяк!!!

Вектора прерываний.

Операционная система в значительной степени управляется с помощью системы прерываний. В реальном режиме имеются 2 типа прерываний: аппаратные и программные. Программные прерывания инициализируются командой int. Аппаратные – внешними событиями, асинхронными по отношению к выполняемой программе. Обычно аппаратные прерывания инициализируются аппаратурой ввода/вывода после завершения выполнения текущей операции.

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

Таблица векторов прерываний располагается в самом начале ОП, т.е. её физический адрес = 0. Таблица векторов прерываний состоит из 256 элементов по 4 байта. Вектора состоят из 16 битового сегментного адреса и 16 битового смещения (сначала идет смещение, а потом сегмент). Каждый вектор прерываний имеет свой номер, называемый номером прерывания, который указывает на его место в таблице. Этот номер, умноженный на 4, дает абсолютный адрес вектора памяти.

Вектора прерываний получают свои значения при запуске системы. Сначала BIOSвыполняя процедуры инициализации, задает значения определенных векторов прерываний. При загрузкеDOSзадаются значения векторам прерыванийDOS.

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

Перед входом в процедуру обработки прерываний принудительно сьрасывется флаг трассировки TFи флаг разрешения прерыванийIF. Завершив обработку прерывания, процедура должна выдать командуIRET, по которой из стека будут извлечены значения регистровCS:IPи регистра флагов. Далее продолжается выполнение прерванной программы.

Процедура обработки прерывания обязательно должна закончится процедурой IRET, после которой считываются значенияflags,CS,IP.

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