Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METODIchka4.DOC
Скачиваний:
5
Добавлен:
04.05.2019
Размер:
940.03 Кб
Скачать

Программирование с использованием драйвера мыши.

При написании программ использующих мышь применяются два способа обработки событий мыши:

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

push ax

; Переключение на сегмент данных программы

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

;Позиционирование текстового курсора в позицию курсора мыши

mov dh, dl ; dh - строка

mov dl, cl ; dl - колонка

mov ah, 02h; ah - номер функции (02h)

int 10h

;Вывод слова Привет

mov сx,7

mov di,offset mystr

11: mov al,[di]

int 29h

inc di

loop 11

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]