Команды, работающие по прерываниям:
По команде INT – программное прерывание - должна быть выполнена следующая последовательность операций:
(SP)← (SP) -2
(Вершина стека) ← (FLAG) ; запоминание состояния регистра флагов в стеке
(SP)← (SP) -2
(Вершина стека) ← (CS)
(SP)← (SP) -2
(Вершина стека) ← (IP) ; сохранение адреса возврата CS:IP в стеке
(IF) ← 0 ; запрет на выполнение маскируемых прерываний
(TF) ← 0 ; запрет пошагового режима работы
(CS) ← (TYPE x 4 +2) ; передача управления на первую команду
(IP) ← (TYPE x 4) ; подпрограммы обработки данного прерывания.
(Отличие от вызова обычной подпрограммы – сохраняется не только CS и IP, но и FLAG.)
Итак, по команде INT выполняется передача управления подпрограмме обработки прерываний, адрес которой генерируется в соответствии с типом прерываний. Текущее состояние FLAG, CS, IP заносится в стек, что позволяет осуществлять выход из процедуры обработки прерывания по команде IRET с последующей передачей управления очередной выполняемой команде. Флаги IF и TF сбрасываются, что предотвращает возможность осуществления маскируемых и пошаговых прерываний. Абсолютное значение адреса вектора прерывания, соответствующего типу прерывания, который определяется операндом команды INT, вычисляется умножением типа прерывания на 4 (т.к. вектора располагаются в ОП с адреса 00000h, занимают 1 Кбайт, под каждый вектор отводится 4 байт). Содержимое двойного слова этой области памяти передается, соответственно, в регистры IP и CS.
Iret – возврат из прерывания.
(IP)← (вершина стека)
(SP)← (SP) +2
(CS)← (Вершина стека)
(SP)← (SP) +2
(FLAG)← (Вершина стека)
(SP) ← (SP)+2
Осуществляет обратную передачу управления в то место, с которого произошло прерывание, восстанавливая по информации из стека содержимое регистров IP, CS и регистра флагов FLAG. Каждая процедура обработки прерываний должна заканчиваться командой IRET. Влияние на флаги: флаги восстанавливает.
Машинный код CF. Операндов нет.
Таблица 2. Соответствие векторов прерываний устройствам компьютера для машин типа IBM PC/AT.
Уровень прерывания |
Вектор прерывания |
Устройство |
IRQ0 |
08h |
Таймер |
IRQ1 |
09h |
Клавиатура |
IRQ2 |
0Ah |
Резерв для подключения нестандартных устройств |
IRQ8 |
70h |
КМОП микросхема |
IRQ9 |
71h |
Перенаправлено на int 0Ah |
IRQ10 |
72h |
Зарезервировано |
IRQ11 |
73h |
Зарезервировано |
IRQ12 |
74h |
Мышь (PS/2) |
IRQ13 |
75h |
Исключение сопроцессора |
IRQ14 |
76h |
Жесткий диск |
IRQ15 |
77h |
Зарезервировано |
IRQ3 |
0Bh |
Последовательный порт COM1 |
IRQ4 |
0Ch |
Последовательный порт COM2 |
IRQ5 |
0Dh |
Жесткий диск |
IRQ6 |
0Eh |
Гибкий диск |
IRQ7 |
0Fh |
Принтер LPT1 |
