мпочок. Зрушення лампочки і установка стану лампочок організовані як окремі підпрограми (процедури).
. Потім управління передається збереженому оброблювачу переривання 09h клавіатури - це дозволяє всім прикладним програмам нормально отримувати і обробляти натискання клавіш. Виклик переривання емулюється послідовністю інструкцій pushf і call.
. Наприкінці обробника аналізується факт одночасного натискання гарячих клавіш Left Ctrl + Left Shift і включається або відключається активність резидентної частини програми. При неактивній (виключеною) резидентної частини вона не робить впливу на роботу комп'ютера.
4. Реалізація резидентної програми на мові Асемблер
Перевірка активності резидента, натискання клавіші:
mov AL, activeAL, ALinactive_continueAL, pressedAL, ALshort key_downpressed, 0short inactive_continue
Якщо клавіша натиснута:
key_down:
call shift_lightset_light
mov pressed, 1
Зрушення і установка лампочки:
shift_light proc nearAL, lightAL, 1AL, 70hnot_shiftedAL, 40h
_ shifted: light, AL_light endp
_ light proc nearAX, AXES, AXAL, ES: [0417h] AL, 8FhAL, lightES: [0417h], AL_light endp
Читання стану клавіатури і перевірка натискання гарячих клавіш, що припиняють резидента:
mov AL, byte ptr ES: [0417h] AL, 6hAL, 6hnotPressedAL, activeAL, 1 active, AL
5. Тестування та налагодження резидентної програми
У додатку Д наведено скріншот результату виконання програми. З наведеного скріншота видно, що програма повідомляє про своє запуску, пізнає і повідомляє, що програма вже завантажена резидентно і перемикає стан клавіш Caps Lock, Num Lock і Scroll Lock при натисканні на клавішу.
Висновок
У даному курсовому проекті була розроблена програма, що змінює стан керуючих клавіш: Caps Lock, Scroll Lock і Num Lock. Програма може використовувати клавіатуру по-різному. Вона може затримати своє виконання, до тих пір, поки оператор не натисне якусь клавішу.
Список використаної літератури:
1. Фіногенов К.Г. Самовчитель по системних функцій MS DOS.- М .: Радио и связь, ентропія, 1995. - 382 с., Іл.
. Зубков С.В. Assembler. Мова необмежених можливостей.- М .: ДМК Пресс, 1999. - 608 с., Іл.
. Пирогов В.Ю. Assembler. Навчальний курс.- М .: Видавець Молгачева С.В., Видавництво Нолидж, 2001. - 848 с., Іл.
Додаток А
(обов'язковий)
Додаток Б
(обов'язковий)
Додаток В
(обов'язковий)
Додаток Г
(обов'язковий)
model tinysegment; визначення кодового сегментаCS: code, DS: code; CS і DS вказують на сегмент кода100h
; резидентна частина програми
: init; перехід на секцію ініціалізації
; дані резидентної частини програми: F dd? ; збережений обробник 2Fhdd? ; збережений обробник 09hdb0; прапор активності резидента
; int 09h отримує управління двічі: при натисканні і при отжатии клавіші. Щоб спрацьовувало при нажаніі,
; використовується прапор: db 0; клавіша натиснута/відпущена (0 - натиснута, 1 - відпущена)
; лампочки контролюються бітами 4,5,6 байта [0040h: 0017h]
; біт 5 (00100000b) - NumLock
; біт 6 (01000000b) - CapsLock
; біт 4 (00010000b) - SrollLockdb 20h; маска лампочок (00100000b) - NumLock On
; обробник переривання клавіатури 09hHandler: ESAXAL, active; перевіряємо активність нашого резідентаAL, ALinactive_continue; неактивний? нічого не делаемAL, pressed; натиснута клавіша або відпущена?
or AL, ALshort key_down; якщо натиснута - переходpressed, 0; відпущена - скинути флажокshort inactive_continue
key_down:; при натисканні клавіші: shift_light; зрушити лампочкуset_light; і встановити ееpressed, 1; і поставити прапорець натискання
inactive_continue: dword ptr CS: old09; перейти на збережений обработчікAX, AXES, AXAL, byte ptr ES: [0417h]
and AL, 6h; перевіряємо одночасне натискання клавіш (вкл/викл резидента)
cmp AL, 6h; 110b - біти 1 і 2 - Ctrl + Left Shift
jne notPressedAL, activeAL, 1; перемикаємо стан резидента (активний/...