Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операційні системи (Лаб. 9).doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
77.82 Кб
Скачать

Int 33h ; регістрація адреси та умов виклику

pop es

Після задання функції 0сh виникає якісно нова ситуація - процедура prmaus буде викликатись незалежно від основної програми. Виклик процедури prmaus буде виконувати драйвер мишки і тільки в випадку виникнення вибраної події (в нашому прикладі при любому переміщенню мишки або при натисканні правої кнопки мишки). Таким чином досягається ефект незалежної і "одночасної" роботи двох програм - основної програми і процедури . При цьому процедура користувача (prmaus) буде викликатись драйвером мишки коли користувач за ПЕОМ виконає вручну відповідні дії з мишкою ( в нашому прикладі коли користувач перемістить мишку по коврику або натисне праву кнопку)

    1. Вимоги до процедури обробки подій:

  • Процедура повинна бути типу far

  • В процедурі необхідно зберегти в стеку вміст регістрів ,що використовуються, з наступним відновленням вмісту регістрів перед поверненням

  • В процедурі необхідно встановити свої значення сегментних регістрів для даних оскільки драйвер мишки "не знає" з якими сегментами працює програма користувача

Приклад організації процедури prmaus

prmaus proc far

; збереження вмісту регістрів ds, es та РЗП

push ds

push es

pusha

;завантаження сегментних регістрів ds та es

push 0b800h ; сегментна адреса відеобуфера

pop es

push _data ;

pop ds

;основне тіло процедури:

;

popa

pop es

pop ds

ret

prmaus endp

Драйвер мишки передає процедурі обробки подій наступні параметри:

  • ax - умова виклику

  • bx - стан кнопок мишки:

біт 0 = 1 натиснута ліва кнопка

біт 1 = 1 натиснута права кнопка

біт 2 = 1 натиснута середня кнопка

  • сх - х - координата (по горизонталі екрану) курсору в пікселях (стовпчики)

  • dx - y - координата (по вертикалі) курсору в пікселях (рядки)

(щоб отримати координати в символах необхідно розділити вміст cx і dx на 8)

    1. Вимоги до основної програми.

Основна програма виконує свій алгоритм і може синхронізувати свою роботу з процедурою обробки подій від мишки через спільні змінні.

Одним із найпростіших алгоритмів основної програми є очікування введення довільного символу з клавіатури ПЕОМ з наступним закінченням роботи програми.

mov ah, 01h ; ввести символ з клавіатури ПЕОМ

Int 21h ; виклик функції dos

jmp exit

Використовуючи доступ до даних основної програми, процедура обробки подій від мишки може "на льоту" читати та змінювати ці дані, створюючи різноманітні ефекти на екрані.

При завершенні програми перед поверненням в DOS необхідно повторити виклик функції драйвера мишки 0ch, але зі значенням cx=0. Завдяки цьому драйвер мишки припинить виклики процедури prmaus:

exit:

xor cx,cx ;cx=0

mov ax,0ch

;вважаємо що регістри es:dx містять логічну адресу процедури prmaus

int 33h ;процедура prmaus

;далі викликатись не буде

УВАГА. Якщо основна програма передасть управління DOS без виконання цієї послідовності команд, то драйвер мишки може продовжувати виклик процедури prmaus. В свою чергу DOS може записати на місце процедури prmaus якусь другу програму, що може привести до не передбачуваних наслідків, включаючи знищення файлів на дисках.