
- •Зміст роботи
- •Довідкові дані.
- •Управління режимами роботи вiдеоконтролера
- •Робота з мишкою
- •Int 33h ; регістрація адреси та умов виклику
- •Вимоги до процедури обробки подій:
- •Вимоги до основної програми.
- •Int 21h ; виклик функції dos
- •Завдання на лабораторну роботу.
- •Питання для перевірки:
- •5. Інформаційні матеріали:
Int 33h ; регістрація адреси та умов виклику
pop es
Після задання функції 0сh виникає якісно нова ситуація - процедура prmaus буде викликатись незалежно від основної програми. Виклик процедури prmaus буде виконувати драйвер мишки і тільки в випадку виникнення вибраної події (в нашому прикладі при любому переміщенню мишки або при натисканні правої кнопки мишки). Таким чином досягається ефект незалежної і "одночасної" роботи двох програм - основної програми і процедури . При цьому процедура користувача (prmaus) буде викликатись драйвером мишки коли користувач за ПЕОМ виконає вручну відповідні дії з мишкою ( в нашому прикладі коли користувач перемістить мишку по коврику або натисне праву кнопку)
Вимоги до процедури обробки подій:
Процедура повинна бути типу 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)
Вимоги до основної програми.
Основна програма виконує свій алгоритм і може синхронізувати свою роботу з процедурою обробки подій від мишки через спільні змінні.
Одним із найпростіших алгоритмів основної програми є очікування введення довільного символу з клавіатури ПЕОМ з наступним закінченням роботи програми.
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 якусь другу програму, що може привести до не передбачуваних наслідків, включаючи знищення файлів на дисках.