Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 330; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.007 с.) |