Программные прерывания представляют обычные подпрограммы, которые вызываются прикладными программами для обработки нажатий клавиш на клавиатуре, событий от таймера, вывода сообщений на экран и других действий. Однако эти подпрограммы относятся не к прикладной программе пользователя, а к операционной системе.
Программные прерывания могут быть вложенными. Они инициируются командой INT с номером от 0 до 0FFh. Базовая система ввода-вывода BIOS и операционная система MS-DOS предоставляют множество функций в виде программных прерываний. Некоторые программные прерывания обеспечивают несколько функций. Например, большинство полезных для пользователя функций MS-DOS закреплено за прерыванием 21h. Номер конкретной функции должен быть указан в регистре AH, а подфункции – в регистре AL.
Аппаратное прерывание может получить управление при выполнении программного. При этом не возникает конфликтов, т.к. каждая подпрограмма обработки прерывания сохраняет значения всех используемых регистров и затем восстанавливает их при выходе. Схема обработки программного прерывания показана на рис. 41
Рис. 41. Схема обработки программного прерывания.
Прерывания по исключению разделяются на несколько видов – исключения по ошибке деления, по точке остановка, по переполнению и по трассировке.
Прерывание по ошибке деления возникает при выполнении инструкции DIV или IDIV, если результат превышает максимально допустимую величину, а также при попытке деления на ноль. В результате управление передаётся обработчику прерывания по вектору 0.
Прерывание по точке останова возникает, если в программе встретилась инструкция INT 3. Выполнение инструкции приводит к передаче управления обработчику прерывания по вектору 3. Система команд микропроцессора 8086 обеспечивает два формата инструкции INT 3 – однобайтовый (код команды CC) и двухбайтовый (код команды CD 03). Функционально они не отличаются, но двухбайтовый формат принято относить к программным прерываниям, а однобайтовый – к исключениям.
Прерывание по переполнению происходит, если при выполнении инструкции INTO установлен флаг переполнения OF. Когда флаг сброшен, инструкция INTO не производит никаких действий. Обработчик прерывания по переполнению использует вектор 4.
Прерывания по трассировке происходят после выполнения каждой инструкции, когда в регистре флагов установлен флаг трассировки TF. В этом случае, завершив выполнение инструкции, микропроцессор передаёт управление обработчику прерывания по вектору 1.
Особенностью микропроцессоров семейства 8086 является то, что после установки флага трассировки связанное с ним прерывание происходит не после инструкции, в ходе выполнения которой этот флаг был установлен, а по завершении следующей за ней инструкции.
Например, если при завершении обработчика прерывания по трассировке с помощью команды IRET в восстановленном содержимом регистра флагов флаг TF окажется установлен, то новое прерывание по трассировке произойдёт не сразу после выполнения инструкции IRET, а по завершении команды, на которую инструкцией IRET будет возвращено управление.
Do'stlaringiz bilan baham: |