При написании программ использующих мышь применяются два способа обработки событий мыши:
1.Опрос положения и клавиш мыши при помощи функции 03h.
2.Написание драйвера событий мыши и установка его при помощи функции 0Сh.
Наиболее популярен второй способ. Драйвер событий является особой функцией, срабатывающей при определенном событии мыши. В приведенном примере драйвер записан как функция handle far proc.
Драйвер событий должен отвечать определенным требованиям которые нужно учитывать. Требования следующие:
1. Состояние регистров после срабатывания функции-драйвера должно оставаться неизменным. Это означает что при входе в драйвер необходимо сохранить регистры в стеке ,а при выхода из драйвера восстанавливаться из стека (см. начало и конец примера).
2. При входе в драйвер мыши регистр DS указывает на сегмент данных обработчика прерывания 33h.
Это означает что для правильного доступа к данным необходимо загрузить в DS сегмент данных программы (не забудьте спасти старое значение в стеке).
Исходя из этих требований алгоритм работы драйвера заключается в следующем:
1) Спасти регистры в стеке.
2) Установить в DS сегмент данных программы.
3) Обработать событие.
4) Восстановить регистры.
5) Возврат (retf).
Пример выполнения работы.
Программа проверяет наличие мыши если она есть выводит символ b и устанавливает свой обработчик события, иначе выдается символ а. Обработчик события по нажатию левой кнопки мыши выдает слово "Привет" в позиции курсора мыши.
cseg segment ;0бъявление сегментов
assume cs:cseg,ds:cseg,es:cseg
handle proc far ; Процедура обработки события
;Сохранение регистров в стеке
push ds
push bx
push сx
push dx
push si
push di
pushax
; Переключение на сегмент данных программы
mov ax, cseg
mov ds,ax
вычисление позиции курсора мыши
shr CX,1; в cx - колонка *8, в dx - строка*8
shr CX,1; получим строку и колонку
shr CX,1; разделим cx и dx на 8 при помощи
shr DX,1 ; сдвига вправо на 3
shr DX,1
shr DX,1
;Позиционирование текстового курсора в позицию курсора мыши