Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Управление прерываниями. Написание собственного прерыванияСодержание книги
Поиск на нашем сайте
В некоторых случаях бывает полезным написание собственного прерывания. Например, многие программы конкретного пользователя могут использовать процедуру, выводящую строки на экран вертикально. Вместо того чтобы включать её в каждую программу в качестве процедуры, можно установить её как прерывание, написав соответствующую процедуру. Краткое описание прерываний таблицы векторов прерываний представлено в табл. А.1 приложения А настоящего практикума (IRQ0 – IRQ15 – это аппаратные прерывания). Как следует из табл. А.1, векторы прерываний в диапазоне 60H – 67H отведены для пользовательских прерываний. Функция 25 h (пересылается в AH) прерывания 21 h устанавливает вектор прерывания на указанный адрес. Адреса имеют размер в два слова. Старшее слово содержит адрес сегмента (CS), младшее - смещение (IP). Чтобы установить вектор, указывающий на одну из процедур пользователя, нужно поместить начальный адрес процедуры в регистр DS (через регистр AX), а смещение – в регистр DX. Номер прерывания, за которым будет закреплена указанная процедура (например, 60 h) помещается в регистр AL. Любая процедура прерывания должна завершаться инструкцией IRET, которая выталкивает из стека три слова: адрес возврата и регистр флагов. Следует отметить, что функция 25 h автоматически запрещает аппаратные прерывания, поэтому не существует опасности, что в процессе перехода к процедуре произойдёт аппаратное прерывание, использующее данный вектор. Когда программа завершается, должны быть восстановлены оригинальные векторы прерываний. В противном случае последующая программа может вызвать данное прерывание и передать управление на то место памяти, в котором пользовательской процедуры уже нет. Функция 35 h (пересылается в AH) прерывания 21 h возвращает текущее значение вектора прерывания, помещая адрес сегмента в регистр ES, а смещение – в регистр BX. Перед установкой собственного прерывания рекомендуется получить текущее значение вектора, сохранить эти значения и затем восстановить их с помощью функции 25 h (как сказано выше) перед завершением своей программы Существуют «ловушки», которых следует избегать при написании собственных прерываний. Например, если программа завершается по нажатию «Ctrl + Bre ak», то вектор прерывания не будет восстановлен, если пользователем не предусмотрено противное. Управление мышью Манипулятор «мышь» относится к интерактивным устройствам, обеспечивающим связь человека с ВМ. Единицей перемещения мыши являются «микки» – сигналы, которые подсчитывает мышь, а потом через определённые интервалы передаёт драйверу. Последний использует эти сигналы для определения положения мыши, преобразуя их в пиксели на экране. Драйвер автоматически перемещает курсор на экране в соответствии с движением мыши и отслеживает координаты курсора, а также предоставляет пользовательской программе ряд функций по использованию мыши. Эти функции обрабатываются прерыванием мыши INT 33 h. Начальная установка драйвера мыши. Функция 0 h (пересылается в AH) прерывания 33 h производит начальную установку и возвращает информацию о текущем состоянии аппаратных и программных средств мыши. Функция определяет текущий режим экрана, прячет курсор и помещает его в центр экрана, а также задаёт начальные значения внутренним переменным драйвера. В качестве результата в регистр AX возвращается значение FFFFh (мышь и драйвер мыши установлены), в регистр BX – количество кнопок мыши: 0002 h – две кнопки, 0003 h – три кнопки, 0000 h – другое количество кнопок. В противном случае, в регистр AX возвращается значение 0000 h – мышь или драйвер мыши не установлены. Показ/ сокрытие курсора мыши. Драйвер мыши поддерживает внутренний счетчик, управляющий видимостью курсора мыши. Функция 2 h уменьшает значение счетчика на единицу, а функция 1 h увеличивает его, но только до значения 0. Если значение счетчика – отрицательное число, он спрятан, если ноль – показан. 1. Чтобы показать курсор, необходимо в регистр AH переслать функцию 1 h и вызвать прерывание 33 h. 2. Чтобы спрятать курсор, необходимо в регистр AH переслать функцию 2 h и вызвать прерывание 33 h. Нужно иметь в виду, что на каждый вызов функции 2 h впоследствии должен быть произведен вызов функции 1 h, для того чтобы восстановить внутреннее значение флажка курсора. Кроме того, при каждом переключении режима экрана функция 2 h вызывается автоматически. Определение состояния мыши. Для определения положения курсора мыши и состояния её кнопок используется функция 3 h (пересылается в AH) прерывания 33 h. В качестве результата эта функция возвращает в регистр BX состояние кнопок мыши, в регистр CX – координату по оси X, в регистр DX – координату по оси Y. В регистре BX первые 3 бита (0 – 2) отвечают за состояние кнопок (табл. 2.9), остальные биты не используются. Таблица 2.9. Биты состояния кнопок мыши
Если бит установлен (равен 1), то соответствующая кнопка нажата, если сброшен (равен 0) – кнопка отпущена. Возвращаемые координаты совпадают с пиксельными координатами соответствующей точки на экране в большинстве графических режимов, кроме 4, 5, 0Dh, 13h, в которых Х – координату мыши – нужно разделить на 2, чтобы получить номер столбца соответствующей точки на экране. В текстовых режимах обе координаты надо разделить на 8, чтобы получить номер строки и столбца соответственно. Установка/ отмена обработчика событий мыши. В большинстве случаев указанная выше функция не используется в программах, так как для того, чтобы реагировать на нажатие кнопки или перемещение мыши в заданную область, требуется вызывать это прерывание постоянно, что приводит к трате процессорного времени. Гораздо эффективнее драйверу самому следить за её передвижениями и передавать управление в программу, как только выполнится заранее определенное условие (например, нажатие левой кнопки мыши). В этом случае выполнение прикладной программы временно приостанавливается, и управление передаётся по установленному адресу. Такую возможность обеспечивает функция 0Ch (пересылается в AH) – установление обработчика событий. Битовая маска определяет условия, вызывающие прерывания. Установленный программистом в 1 бит разрешает прерывание, сброшенный в 0 – запрещает прерывание. При вызове данной функции битовая маска помещается в регистр CX; описание битов маски представлено в табл. 2.10. Драйвер фирмы «Microsoft» следит за позицией мыши, а драйверы фирм «Logitech» и «Mouse Systems» – за позицией курсора.
Таблица 2.10. Описание битов маски
Также при вызове функции пара регистров ES: DX должна содержать адрес дальнего перехода на процедуру обработки прерываний. Обработчик событий должен быть оформлен как дальняя процедура. На входе в процедуру обработчика необходимо передать следующие параметры: 1) регистр АХ содержит условие вызова (биты установлены так же как и в маске вызова); 2) регистр ВХ содержит состояние кнопок; 3) регистры СХ, DX – X - и Y - координаты курсора мыши соответственно; 4) регистры SI, DI – счетчики последнего перемещения по горизонтали и вертикали (единицы измерения для этих счетчиков – микки, 1/200 дюйма). После завершения работы подпрограммы работа прикладной программы возобновляется в той точке, где была прервана. Перед завершением программы установленный обработчик событий должен быть обязательно удален (вызов функции 0Ch с СХ = 0), так как иначе при первом же выполнении условия управление будет передано по адресу в памяти, с которого начинался обработчик.
|
||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2020-12-09; просмотров: 259; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.235.195 (0.007 с.) |