Управлiння клавiатурою IBM PC .

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Електронні обчислювальні машини

Інформація про роботу

Рік:
2004
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
КІ-З

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 6 з курсу „ Системне програмування ” Тема: Управлiння клавiатурою IBM PC . Виконав: студент групи КІ-3 Львів – 2004 Мета роботи: Вивчення органiзацiї та принципiв роботи клавiатури, оволодiння навичками управлiння клавiатурою за допомогою системних функцiй. Короткі теоретичні відомості Процес взаємодiї системи з клавiатурою _____ | | Адреса ПОП з вектора |---------------->| ЦП |<--- переривання 09h (комiрки |Апаратне |_____| 00:24h та 00:26h) Вiдпускення/ |переривання | натискання |типу 09h _____|______ Слово прапорiв клавiатури клавiшi ____|______ Порт | ПОП int 09h| _______________ __|__|__|_ | Контролер | 60h |____________| | Адреса 40h:17h| |Клавiатура|-->| клавiатури|------>| + |<--------|_______________| |__________| |___________| Скен-|____________| | | | | | | | | код | Розряд: | 7: Ins | 6: Caps Lock | Скен + 5: Num Lock | ASCII 4: Scroll Lock Кільцевий | 3: Alt буфер | 2: Ctrl вводу | 1: Shift Left ____________ | 0: Shift Right 40h:1eh| | | |___________ | | Початок --->|Скен |ASCII | | 40h:1Ah | |_____|______| | | |Скен |ASCII |<-| | |_____|______| | | |<------- Кiнець 40h:1Ch | |____________| | |____________| 40h:3Ch | _____________________ |->| Програма користувача| | int 16h | |_____________________| Клавiатура має три основних типи клавiш: Символьнi (алфавiтно-цифровi): букви вiд А до Z, цифри вiд 0 до 9, символи !,@,#,$,% i т.iн. Функцiональнi: <Home>, <End>, <Backspace>, стрiлки, <Return>, <Del>, <Ins>, <PgUp>, <PgDn> i програмно-функцiональнi клавiшi. Управляючi: <Alt>, <Ctrl>, <Shift>, якi працюють в сукупностi з iншими клавiшами. Роботою клавiатури управляє спецiальна мiкросхема - контролер клавiатури. В його функцiї входить розпiзнавання натиснутої клавiшi та пересилання закрiпленого за нею коду у свiй вихiдний регiстр (порт), як правило, з номером 60h. Код клавiшi, що поступає в порт, називається скен-кодом. При цьому кожнiй клавiшi присвоєнi два скен-коди, якi вiдрiзняються на 80h (менший код пересилається в порт при натисканнi клавiшi, бiльший - при вiдпусканнi). Програма обробки переривання вiд клавiатури INT 09H окрiм портiв працює ще з двома областями пам'ятi: кiльцевим буфером вводу (адреси вiд 40h:1Eh до 40h:3Dh), куди врештi решт пересилаються ASCII коди натиснутих клавiш, i словом стану (словом прапорiв) клавiатури (адреса 40h:17h, 40h:18h), в якому фiксується стан управляючих клавiш (<Shift>,<Caps Lock>,<Num Lock> i т.iн). Якщо визначено скен-код клавiшi-перемикача (правий Shift, лiвий <Shift>, <Ctrl>, <Alt>, <Scroll Lock>, <Num Lock>, <Caps Lock> i <Insert>), змiнюється вмiст комiрок слова стану клавiатури. В буфер клавiатури при цьому нiчого не пересилається (виключенням є лише клавiша <Insert>). Завдання на лабораторну роботу Створити програму, що реалiзує вказаний викладачем варiант завдання. Програму оформити у виглядi .COM файлу. Запустити створену програму та задокументувати результати її виконання. Скласти звiт про виконану роботу. Варіант 9. Органiзувати ввiд циклiчний посимвольний ввiд з ехо-вiдображенням (функцiя 01h INT 21H) з клавiатури. Забезпечити переключення мiж режимами вводу/вiдображення символьних i функцiональних/управляючих кодiв натисканням певної комбiнацiї клавiш. Перевiрити реакцiю програми на <Ctrl>/C. Забезпечити можливiсть перенаправлення вводу та виводу.  Вміст .asm-файлу CODE SEGMENT WORD 'CODE' ORG 100h ASSUME cs:CODE, ds:CODE, ss:CODE, es:CODE begin: Jmp progbody ControlCMsg db 10,13,' * Press any key/combination to view its ASCII/EXT code *' db 10,13,' * press CTRL+C to exit *$' KeyMsg db 10,13,'Keypressed echo: $' CodeMsg db 10,13,'ASCII-code: $' ExtMsg db 10,13,'Extended-code: $' KeyCode db 0,0,'$' LineFeed db 10,13,'$' progbody: ;********************************************* mov dx,OFFSET ControlCMsg; mov ah,09 int 21h cycle: mov dx,OFFSET KeyMsg; mov ah,09 int 21h mov ah,01h int 21h cmp al,0 jz ext mov bh,0 ; pressed key is ASCII jmp print ext: mov bh,1 ; pressed key is functional mov ah,01h int 21h ; ѕ extended scan-code print: mov dl,al ; put symbol to out register mov bl,al ;************ ?# digit (first)**************** and al,0f0h shr al,4 cmp al,09h jg az01 add al,30h mov KeyCode,al jmp next01 az01: add al,37h mov KeyCode,al next01: ;************ #? digit (second)*************** mov al,bl and al,00fh cmp al,9h jg az02 add al,30h mov KeyCode+1,al jmp next02 az02: add al,37h mov KeyCode+1,al next02: ;********************************************* mov dx,OFFSET CodeMsg cmp bh,1 jz extprn jmp asciiprn extprn: mov dx,OFFSET ExtMsg asciiprn: mov ah,09 int 21h mov dx,OFFSET KeyCode ;; mov ah,09 ; print string int 21h ;; jmp cycle ;********************************************* mov ah,4Ch int 21h CODE ENDS END begin Результат виконання програми * Press any key/combination to view its ASCII/EXT code * * press CTRL+C to exit * Keypressed echo: a ( Натиснуто клавішу “a” ASCII-code: 61 Keypressed echo: 1 ( Натиснуто клавішу “1” ASCII-code: 31 Keypressed echo: ← ( Натиснуто клавішу ESC ASCII-code: 1B Keypressed echo: ; ( Натиснуто клавішу F1 Extended-code: 3B Keypressed echo: ^C ( Натиснуто CTRL+C Виконання програми завершено. Висновок: Виконуючи дану лабораторну роботу, я вивчив органiзацiю та принципи роботи клавiатури, оволодiв навичками управлiння клавiатурою за допомогою системних функцiй.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!