русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Работа по прерываниям


Дата добавления: 2015-07-23; просмотров: 915; Нарушение авторских прав


Программный интерфейс DOS и BIOS организован в виде обращения к процедурам по прерываниям.

Прерыванием является указание процессору на то, что произошло какое-либо событие и требуется его обработка, называемая реакцией на прерывание.

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

INT n

где n - номер прерывания, обычно обозначается в шестнадцатеричной системе счисления (с буквой Н в конце числа).

 

Реакцией процессора на прерывание является выполнение подпрограммы, адрес начала которой, или вектор прерывания, находится в таблице, номер строки которой и есть номер прерывания. Максимальное количество прерываний для процессоров Intel – 256.

К подпрограммам DOS и BIOS доступ осуществляется по прерываниям. Связано это с тем, что в разных версиях адреса начала различных подпрограмм могут начинаться с разных адресов. А так как таблицу векторов прерываний формирует сама ОС, то достаточно только зафиксировать назначение строк таблицы, а ее содержание может изменяться.

В IBM-совместимых компьютерах не все вектора прерываний распределены между событиями и устройствами. Неиспользуемые номера и предназначены для обращения к подпрограммам ОС.

Так как свободных прерываний не много, то по одному вектору может вызываться несколько подпрограмм. Номер подпрограммы, называемый функцией или службой преры­вания, передается в качестве параметра, записываемого в регистр АН. Например, наиболее часто используемое прерывание DOS 21Н имеет 87 служб.

Подпрограммы DOS имеют более высокий уровень обработки информации и часто дополнительно используют прерывания BIOS.

 

Основные прерывания DOS:

21Н – общие функции DOS;



25Н – безусловное чтение с диска;

26Н – безусловная запись на диск.

Основные прерывания BIOS:

10Н – работа с видеосистемой;

12Н – получение размера основной памяти;

13Н – работа с дисками;

14Н – работа с последовательными портами;

15Н – разнообразные службы;

16Н – работа с клавиатурой;

17Н – работа с принтером;

19Н – перезагрузка компьютера;

1АН – работа с часами реального времени.

Иногда возникает ситуация, когда в программе необходимо определить собственные алгоритмы реакции на прерывания от внешних устройств или операционной системы, отменив при этом стандартные реакции.

Процедура, которая будет обслуживать прерывание, должна иметь директиву interrupt и строго фиксированный список параметров:

Procedure <имя> (Flags,

CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);

interrupt;

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

 

Собственно переопределение некоторого прерывания производится обращением к процедуре модуля DOS:

SetIntVec (IntNo:byte; Vector:Pointer);

IntNo – номер прерывания, которое необходимо переопределить;

Vector – адрес новой процедуры обработки прерывания, которая будет запускаться автоматически.

 

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

GetIntVec (IntNo:byte; Var Vector:Pointer);

которая присваивает второму параметру адрес текущей реакции на прерывание с номером IntNo.

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

 

Программы, обрабатывающие прерывания, являются специфическими, так как обращение к ним происходит не из сегмента программ, а из таблицы прерываний. Поэтому для них необходимо указывать дальний (межсегментный) вызов директивой компилятора {$F+}.

Пример. Обработка прерывания, возникающего при нажатии клавиш Ctrl-Break.

Program Ctrl_Break;

{ Демонстрационный пример обработки прерывания,

возникающего при нажатии клавиш Ctrl-Break }

Uses Dos;

Const BreakFlag:boolean=False;

Var IntSt:pointer; { Адрес стандартного обработчика }

{$F+}

Procedure CtBr; interrupt;

Begin

BreakFlag:=true;

end;

{$F-}

Begin

{ Запоминаем адрес стандартной реакции }

GetIntVec($1b,IntSt);

SetIntVec($1b,@CtBr);

Writeln('Для окончания нажмите Ctrl-Break');

Repeat

Until BreakFlag;

{ Восстанавливаем первоначальный адрес реакции }

SetIntVec($1b,IntSt)

end.

Контрольные вопросы

1. Что такое «ассемблер»?

2. Что такое «макроассемблер»?

3. В каких случаях используется язык Ассемблер?

4. Что такое «встроенный ассемблер»?

5. Что такое «OBJ-файл»?

6. Какова структура asm-оператора?

7. Как в asm-операторах записываются комментарии?

8. Каков общий вид команды ассемблера (asm-оператора)?

9. Все ли регистры можно изменять в asm-операторах?

10. Как записываются локальные и глобальные метки в asm-операторах?

11. Какие коды инструкций (команд) используются во встроенном ассемблере?

12. Как обозначаются имена, совпадающие с зарезервированными словами?

13. Как в asm-операторах Паскаля в выражениях трактуется имя переменной?

14. Как в asm-операторах обозначается переменная с результатом функции?

15. С помощью какой директивы создается подпрограмма, полностью написанная на языке ассемблер?

16. Как можно напрямую обратиться к ячейкам памяти?

17. К ячейкам какого размера можно обращаться напрямую?

18. Как записывается адрес при обращении к ячейкам массива?

19. Как выполнить доступ к портам ввода-вывода?

20. Какой командой можно вызвать любое прерывание?

21. Что является реакцией процессора на прерывание?

22. Какой номер имеет наиболее часто используемое прерывание DOS?

23. Какую директиву должна иметь подпрограмма, обслуживающая прерывание?

24. Какова форма записи процедуры переопределения прерывания?

25. Какова форма записи процедуры восстановления прерывания?

 




<== предыдущая лекция | следующая лекция ==>
Port, PortW | Основные понятия


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.095 сек.