ЗМІСТ
1 ОПИС АПАРАТНОЇ ЧАСТИНИ МАНІПУЛЯТОРА “МИШІ” ТА ОСНОВНИХ ФУНКЦІЙ КЕРУВАННЯ............................................................................................ 7
2 РОЗРОБКА СТРУКТУРИ ТА АЛГОРИТМІВ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ КЕРУВАННЯ МАНІПУЛЯТОРОМ “МИША”………………..9
3 ТЕКСТ ПРОГРАМИ ПРОТОКОЛЮВАННЯ РОБОТИ З ФАЙЛАМИ…………11
ВИСНОВОК………………………………………………………………………..14
СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ…………………………………….15
1 ОПИС АПАРАТНОЇ ЧАСТИНИ МАНІПУЛЯТОРА “МИШІ” ТА ОСНОВНИХ ФУНКЦІЙ КЕРУВАННЯ
У всіх сучасних моделях координатно-вказівних пристроїв типу “миша” в якості стандартного прийнятий інтерфейс взаємодії з комп’ютером, який запропонувала компанія Microsoft. Він заснований на програмному перериванні центрального процесора і використанні набору функцій обробки переривань для аналізу інформації, яка отримується від “миші”.
Перший варіант “миші” компанії Microsoft з’єднювався із комп’ютером з допомогою спеціальної плати, яка підключалася до системної шини. Наступні моделі маніпуляторів підключалися до комп’ютера через послідовний порт.
В той же час існує ще 2 види спеціальних портів для підключення “миші”: InPort компанії Microsoft та PS/2 від IBM, який останнім часом здобув велику популярність.
Переміщення “миші” вимірюється в кроках. Крок – це мінімальне переміщення “миші”, яке реєструють її датчики.
Драйвер “миші” перетворює підраховану кількість кроків переміщення маніпулятора в число елементів зображення на екрані монітору. При переміщенні “миші” курсор зсовується на пропорційну величину.
Для керування маніпулятором миша використовують переривання int 33h.
Нижче наведені деякі із функцій для керуванням маніпулятором “миша”:
Ax=0000h – ініціалізація “миші”. Виконується апаратний і програмний скид миші.
Якщо операція пройшла успішно то Ax=FFFFh, інакше Ax=0000h.
Ax=0001h – показати курсор миші
Ax=0002h – сховати курсор миші
Ax=0003h – оприділити стан миші. В Bx:
- біт 0 – вказує чи нажата ліва клавіша “миші”
- біт 1 – чи нажата права клавіша “миші”
- біт 2 – чи нажата середня клавіша “миші”
Ax=0004h – встановити курсор. (Cx=x, Dx=y).
Ax=000Ch – встановити обробник миші.
Es:Dx – вказуємо адрес обробника
Cx – умова виклику. Де біти:
0 – переміщення миші
1 – натискання лівої клавіші миші
2 – відпускання лівої клавіші
3 – натискання правої клавіші миші
4 – відпускання правої клавіші миші
5 – натискання середньої клавіші миші
6 – відпускання середньої клавіші миші
2 РОЗРОБКА СТРУКТУРИ ТА АЛГОРИТМІВ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ КЕРУВАННЯ МАНІПУЛЯТОРОМ “МИША”
Для вирішення поставленого завдання необхідно встановити обробник, який буде викликатися при переміщенні миші, а також при натисканні лівої клавіші “миші”.
Зробити це можна 2 методами:
встановити обробник переривання int 33h вручну за допомогою функцій Ah=35h(25h) (записати/зчитати адрес обробника) переривання int 21h.
За допомогою функції ax=000Ch переривання int 33h.
Для розв’язання поставленого завдання було обрано другий метод.
Отже, при запуску програми переходимо на мітку init. Наступним кроком ініціалізуємо “мишу” за допомогою функції Ax=0000h.
Далі перевіряємо чи рівний регістр ax=0000h. Якщо так – то “миша” не ініціалізована і переходимо в кінець програми, де виводимо повідомлення про помилку і виходимо із програми.
В іншому випадку показуємо курсор “миші” (функція ax=0001h) і встановлюємо наш обробник переривань, який спрацьовує при переміщення “миші”, а також при нажатті лівої клавіші “миші”.
mov ax,0001h
int 33h
mov ax,000Ch
mov Dx, offset mouse_proc
mov cx,0000000000000011b
int 33h
Далі програма зациклюється до тих пір, поки не відмінений цей обробник (обробник відміняється при одночасному нажатті лівої і правої клавіші “миші”)
Рисунок 2.1 Блок-схема процедури обробки миші
Із блок-схеми видно, що в обробнику переривання ми перевіряємо (з допомогою функції Ax=0003h) стан миші.
Якщо нажата ліва клавіша “миші”, то малюєм символ “*”.
Якщо нажаті права та ліва клавіші “миші”, то відміняєм обробник і виходимо із програми.
При переміщенні та переміщенні з нажатаю правою клавішею обробник не виконує ніяких дій, тільки передає управління системі.
3 ТЕКСТ ПРОГРАМИ ПРОТОКОЛЮВАННЯ РОБОТИ З ФАЙЛАМИ
.model TINY ; код і дані в одному сегменті (64 кб) (com-програма)
.code
org 100h
start:
jmp init ;перейти на ініціалізацію миші та обробника миші
;===============Обробник для керування мишею===============
mouse_proc proc far
;======перевірка стану миші
mov ax,0003h
int 33h ;cx=x dx=y bx-нажаті клавіші(біт 0 –ліва, біт 1 - права)
;=======================================================
;=для текстового режму, щоб взнати положення курсора, потрібно |
;=поділити отримані значення на 8(відповідно зсунути вправо на 3 | ;=позиції) |
;=======================================================
shr cx,3
shr dx,3
cmp Bl,3h ; якщо нажаті 2 клавіші
je uninst
cmp Bl,1h ; якщо нажата ліва клавіша
je left
jmp exit ; вийти із обробника
left:
;=====встановити текстовий курсор в необхідну позицію======
mov Ah,02h
mov Bh,0h
sub dl,1
mov Dh,Dl
mov Dl,cl
int 10h
;=================вивести * ======================
mov ah,09h
mov Dx,offset left_sym
int 21h
jmp exit
;==================відмінити обробник====================
uninst:
mov ax,000Ch
mov Dx, offset mouse_proc
mov cx,0000h
int 33h
mov x,1
;======================================================
exit:
retf
mouse_proc endp
;==============ініціалізація миші та обробника================
init:
mov ax,0000h ;ініціалізувати мишу
int 33h
;Якщо не ініціалізовано мишу, то вихід
cmp Ax, 0000h
je error_init
;===========миша ініціалізована==========================
mov ax,0001h ;показати курсор
int 33h
;================встановлення обробника=================
;==========який реагуватиме на переміщення миші============
;========та натискання лівої клавіші миші===================
mov ax,000Ch
mov Dx, offset mouse_proc
mov cx,0000000000000011b
int 33h
;=========очікувати поки не натиснено ліву і праву клаівіші миші==
cycle:
cmp x,1
jne cycle
ret ;вихід
;========вивід повідомлення при помилці ініціалізації==========
error_init:
mov ah,09h
mov dx,offset err_mes
int 21h
ret
;===========Дані======================================
err_mes db "error in initialization mouse",0Dh,0Ah,"$"
left_sym db "*",0Dh,0Ah,"$"
x db 0
end start
ВИСНОВКИ
В результаті виконання завдання курсового проектування на мові Assembler розроблено програму, яка опрацьовує поточний стан маніпулятора “миші” і при натисканні на ліву клавішу “миші” виводить символ “*” в поточну позицію екрану
ЛІТЕРАТУРА
Основна:
1. Зубков С.В. Assembler для DOS, Windows и UNIX – 3-е изд., стер. – М.: ДМК Пресс; СПб.: Питер, 2004. – 608с.
2. Костельцев А.В. Построение интерпретаторов и компиляторов. – СПб: Наука и техника, 2001. – 224 с.
3. Системное программное обеспечение. Учебник для вузов/ А.Ю. Молчанов. - СПб: Питер, 2003. – 396 с.
4. А.В.Фролов, Г.В.Фролов. MS-DOS для програмиста №18,19. – М.: Диалог-МИФИ, 1995. – 254 с.
5. Т.Пратт. Языки программирования. Разработка и реализация. – М.: Мир, 1979.
6. Гук М. Дисковая подсистема ПК. - СПб.: Питер, 2001. – 336с.: ил.
Додаткова:
1. Бек Л. Введение в системное программное обеспечение. – М.: Мир, 1989.
2. Ф.Льюис, Д.Розенкрац, Р.Стирнз. Теоретические основы проектирования компиляторов. – М.: Мир, 1979.
3. Т.Пратт. Языки программирования. Разработка и реализация. – М.: Мир, 1979.