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


Стек

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

 

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.