Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KR_Oleg_Krutygolova.docx
Скачиваний:
11
Добавлен:
05.03.2016
Размер:
272.66 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Тернопільський національний технічний університет

імені Івана Пулюя

Кафедра комп’ютерних систем та мереж

КУРСОВА РОБОТА

З ДИСЦИПЛІНИ “СИСТЕМНЕ ПРОГРАМУВАННЯ”

на тему:

“ОБРОБНИК КЛАВІАТУРИ ЗАГАЛЬНОГО ПРИЗНАЧЕННЯ”

Виконав

cтудент групи СІ-31 ________________________ О. І. Крутиголова

(Підпис)

№ СІ-11-129

Керівник проекту ________________________ М. І. Паламар

(оцінка, підпис, дата)

Тернопіль – 2013

ЗМІСТ

ВСТУП 6

Із самого початку існування IBM сумісних комп'ютерів постала проблема виводу на екран і введення з клавіатури символів кирилиці. Тільки починаючи з версії MS DOS 6.0 з'явилася підтримка національної 866 сторінки. До появи версії MS DOS 6.0 проблему вирішували так називані програми русифікатори. Ці програми заміщали символи додаткового кодового набору. Робилося це шляхом підстановки шрифту прошитого в ПЗУ відеоадаптера своїм. Ці програми були практично на кожнім комп'ютері. Найвідомішими з них були ENHFONT, KEYRUSS, LMSCR&LMKEY, KYRILLIC. Був ще один спосіб вирішити проблему русифікації - перепрограмувати ПЗУ відеоадаптера, але він не знайшов великого застосування. Після виконання програми в текучому каталозі буде створений двійковий файл з образами всіх 256 елементів розміром 4096 байт (256х16 байт). Ці образи використовуються в пам’яті при виводі повідомлень в текстовому режимі, а значить цей файл можна загрузити в пам’ять і редагувати символи графічними засобами. Оскільки існує 256 символів а англійських букв разом з цифрами 62, а інші символи – символи псевдографіки, інші знаки – крапки, коми і т.д. На цьому й ґрунтується принцип кирилізації – заміна символів, що рідко використовуються на російські чи українські букви. Тому після зчитування символів їх потрібно відредагувати. Для подальшого редагування файлу зі шрифтом можна використовувати програми типу “fontedit.exe”, “fe.com”, “fonted.exe”. Після редагування потрібно цей шрифт записати у відеопам’ять, що й робить програма кирилізатор. Наступним етапом в написанні такої програми є стеження за клавіатурою. Коли вибраний український чи російський режим потрібно замінити адреси, так щоб вони(адреси) вказували на шрифт з українськими чи російськими буквами, і навпаки коли вибраний англійський режим. 7

1РОЗРОБКА СРУКТУРИ ПРОГРАМИ 9

1.1Аналіз технічого завдання 9

1.2Обгрунтування алгоритму і структури програми 11

1.3Розробка блок-схеми алгоритму програми 14

1.4Розробка блок-схеми алгоритмів окремих процедур 16

2ОПИС ФУНКЦІОНУВАННЯ ПРОГРАМИ 18

2.1Опис вхідних, вихідних даних 18

2.2Опис процедур і функцій 21

Оскільки регістри можуть містити тільки цілочисельні значення (тобто числа, не, з плаваючою комою), результат ділення розбитий на приватне і залишок. Тепер, залежно від розміру джерела, приватне зберігається в eax, а залишок у edx: розмір джерела поділ приватне в ... залишок у ... BYTE (8-bits) ax / дільник AL AH WORD (16-bits) dx: ax * / дільник AX DX DWORD (32-bits) edx: eax * / дільник EAX EDX * = Наприклад: якщо dx = 2030h, а ax = 0040h, dx: ax = 20300040h. Dx: ax - значення dword, де dx представляє старше word, а ax - молодше. Edx: eax - значення quadword (64 біта), де старше dword в edx і молодше в eax. Джерело операції ділення може бути:     8-біт регістр (al, ah, cl, ...)     16-біт регістр (ax, dx, ...)     32-біт регістр (eax, edx, ecx ...)    8-біт значення з пам'яті (byte ptr [xxxx])     16-біт значення з пам'яті (word ptr [xxxx])    a 32-біт значення пам'яті (dword ptr [xxxx]) 21

Джерело не може бути безпосереднім значенням, тому що тоді процесор не зможе визначити розмір вихідного операнда. Логічні операції з битами - OR, XOR, AND, NOT.Еті команди працюють з приймачем і джерелом, виключення команда 'NOT'. Кожен біт в приймачі порівнюється з тим же самим бітом в джерелі, і в залежності від команди, 0 або 1 поміщається в біт приймача: команда AND OR XOR NOT Біт джерела 0 0 1 1 0 0 1 1 0 0 1 1 0 1 Біт приймача 0 1 0 1 0 1 0 1 0 1 0 1 X X Біт результату 0 0 0 1 0 1 1 1 0 1 1 0 1 0 AND (логічне І) встановлює біт результату в 1, якщо обидва біта, біт джерела і біт приймача встановлені в 1. OR (логічне АБО) встановлює біт результату в 1, якщо один з бітів, битий джерела або біт приймача встановлений в 1. XOR (НЕ АБО) встановлює біт результату в 1, якщо біт джерела відрізняється від біта приймача. NOT інвертує біт джерела. 22

3ТЕСТУВАННЯ ПРОГРАМИ ТА РЕЗУЛЬТАТИ ЇЇ ВИКОНАННЯ 23

3.1Результати роботи (screenshots, screen capture) 23

23

Рисунок 3.1 Менеджер процесів Volcov Comander 23

Далі продемонструємо можливості українізації тексту, що вводиться на рис.3.2: 24

24

Рисунок 3.2 Введення тексту кирилицею 24

ВИСНОВКИ 25

СПИСОК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ 26

Додатки 27

ДОДАТОК A 28

ВСТУП

Поява мікропроцесорів в 60-х роках пов’язано з розробкою інтегральних схем (ІС). Інтегральні схеми об’єднували в собі різні електронні компоненти у єдиний елемент на силіконовому“чіпі”. На початку 70-х мікрокомпю’тери на процесоріIntel 8086 сповістили про перше покоління мікропроцесорів. До 1974 року з’явилось друге покоління мікропроцесорів загального призначенняIntel 8080. Цей успіх спонукав інші фірми до виробництва таких чи подібних мікропроцесорів. В 1978 році фірма Intelвипустила процесор третього покоління –Intel8086, який був частково сумісний з процесорами попереднього покоління. Цей процесор на той час був значним поступом вперед в даній галузі. Починаючи з 1981 року фірмаIBMобирає цей процесор для виробництва персональних комп’ютерів. І коли ми говоримо про сумісність програмного забезпечення зIBMPCто в першу чергу маємо на увазі сумісність з архітектурою мікропроцесора (x86).

Колись ассемблер був мовою, без знання якого не можна було змусити комп'ютер зробити що-небудь корисне. Поступово ситуація мінялася. З'являлися більш зручні засоби спілкування з комп'ютером. Але, на відміну від інших мов, ассемблер не вмирав, більш того він не міг зробити цього в принципі. Чому? У пошуках відповіді спробуємо зрозуміти, что таке мова ассемблера взагалі.

Якщо коротко, то мова ассемблера — це символічне представлення машинної мови. Усі процеси в машині на найнижчому, апаратному рівні приводяться в дію тілько командами (інструкціями) машинної мови. Звідси зрозуміло, що, незважаючи на загальну назву, мова ассемблера для кожного типу комп'ютера своя. Це стосується і зовнішнього вигляду програм, написаних на ассемблері, і ідей, відображенням яких ця мова є.

По-справжньому вирішити проблеми, зв'язані з апаратурою (чи навіть, більш того, що залежать від апаратури як, наприклад, підвищення швидкодії програми), неможливо без знання ассемблера.

Мова ассемблера для комп'ютера “рідна”, тобто найефективніша програма може бути написана тільки на асемблері (за умови, що її пише кваліфікований програміст). Тут є одне маленьке “але”: це дуже трудомісткий, потребуючий великої уваги і практичного досвіду процес. Тому реально на ассемблері пишуть в основному програми, що повинні забезпечити ефективну роботу з апаратною частиною. Іноді на ассемблері пишуться критичні за часом чи виконання витрати пам'яті ділянки програми. Згодом вони оформляються у виді підпрограм і сполучаються з кодом на мові програмування високого рівня.

Із самого початку існування IBM сумісних комп'ютерів постала проблема виводу на екран і введення з клавіатури символів кирилиці. Тільки починаючи з версії MS DOS 6.0 з'явилася підтримка національної 866 сторінки. До появи версії MS DOS 6.0 проблему вирішували так називані програми русифікатори. Ці програми заміщали символи додаткового кодового набору. Робилося це шляхом підстановки шрифту прошитого в ПЗУ відеоадаптера своїм. Ці програми були практично на кожнім комп'ютері. Найвідомішими з них були ENHFONT, KEYRUSS, LMSCR&LMKEY, KYRILLIC. Був ще один спосіб вирішити проблему русифікації - перепрограмувати ПЗУ відеоадаптера, але він не знайшов великого застосування. Після виконання програми в текучому каталозі буде створений двійковий файл з образами всіх 256 елементів розміром 4096 байт (256х16 байт). Ці образи використовуються в пам’яті при виводі повідомлень в текстовому режимі, а значить цей файл можна загрузити в пам’ять і редагувати символи графічними засобами. Оскільки існує 256 символів а англійських букв разом з цифрами 62, а інші символи – символи псевдографіки, інші знаки – крапки, коми і т.д. На цьому й ґрунтується принцип кирилізації – заміна символів, що рідко використовуються на російські чи українські букви. Тому після зчитування символів їх потрібно відредагувати. Для подальшого редагування файлу зі шрифтом можна використовувати програми типу “fontedit.exe”, “fe.com”, “fonted.exe”. Після редагування потрібно цей шрифт записати у відеопам’ять, що й робить програма кирилізатор. Наступним етапом в написанні такої програми є стеження за клавіатурою. Коли вибраний український чи російський режим потрібно замінити адреси, так щоб вони(адреси) вказували на шрифт з українськими чи російськими буквами, і навпаки коли вибраний англійський режим.

  1. Розробка сруктури програми

    1. Аналіз технічого завдання

У даному курсовому проекті потрібно розробити програму-резидент для мікропроцесора Intel х86яка перемикає кодову сторінку клавіатури. Програма після запуску повинна залишатись у пам’яті і слідкувати та аналізувати потік отриманих даних з клавіатури.

Як вже було сказано у вступі асемблер потребує більш ґрунтовних знань апаратної частини комп’ютера. Для написання програми детальніше розглянемо принципи роботи відеоадартера а також ознайомимося з принципом воводу текстової інформації на екран.

Підпрограми (маються на увазі будь-які програми які працюють під управлінням DOS) отримують адрес загруженого в пам’ять масиву, який містить поточні образи кожного із 256 можливих символів. При необхідності виводу на екран відповідна процедура відшукує образ відповідного сиволу і, керуючись цим образом, послідовно крапка за крапкою, малює його на екрані. Таким чином, необхідною умовою використання текстових можливостей модуля є попередня загрузка в пам’ять потрібного шрифта. Для виводу тексту у графічному режимі використовуються матричні шрифти, опис і розробка яких виходить за межі даного курсового проекту.

Для створення файлу “8x16.fnt” була використана програма на мовіPascal яка приводиться в додатку 2. Принцип роботи програми простий – вона зчитує із відеопам’яті образи символів і записує їх у файл. В цій програмі один із ключових параметрів – висота шрифту(зміннаH) отримується на основі аналізу типу драйвера. В адаптерахCGA, EGA іVGA реалізуються одинакові розширення по горизонталі у графічному режимі – 640 пікселів. Це оприділяє ширину по-крапкового образу кожного символу640/80= 8пікселів (при максимальні довжині текстової стрічки 80 символів). Висота ж символів для різних графічних режимів різна: 200 пікселів дляCGAдають висоту символу 200/25 = 8 пікселів для 25 текстових стрічок, в той час як дляEGA350/25 = 14 пікселів, а дляVGA– 480/25 = 19 пікселів. АдаптерVGAв текстовому режимі забезпечує розширення 720х400 пікселів, тому у ньому використовується шрифт розміром 9х16. Але по-крапковий образ кожного символу описується матрицею 8х16 біт (128 біт чи 16 байт), так як в цьому випадку допоміжний 9-й піксел по горизонталі автоматично виводиться справа від символу кольором фону і слугує роздільником між символами.

    1. Обгрунтування алгоритму і структури програми

Програму умовно можна поділити на три частини: резидента частина, обробник клавіатури, обробник відео-сервісу. Резидента частина знаходиться в пам’яті і контролює (за допомогою переривання від клавіатури 09h) натискання клавіш на клавіатурі, коли натиснута будь-яка клавіша генерується переривання від клавіатури, в свою чергу обробник клавіатури перевіряє чи ця клавішаRightShift(правийShift), і коли так викликається обробник відео-сервісу (за допомогою переривання 10h), а коли ні передається управлінняDOS.

Програма використовує модель пам’яті TINY, тобто код програми, дані і стек розміщуються в одному сегменті 64K. Використовується тільки дляCOM-програм.

При створені програми було використане переривання BIOS 10H. Детальніше розглянемо можливості цього сервісу:

Таблиця 1.1 – Функції переривання 10h

Функція

Дії

00H

Встановити відеорежим

01H

Встановити розмір і форму курсору

02H

Встановити позицію курсору

03H

Читати позицію курсору

04H

Читати світлове перо

05H

Вибрати активну сторінку дисплея

06H

Перегорнути вікно догори (очистити екран)

07H

Перегорнути вікно вниз

08H

Читати символ /атрибут

09H

Писати символ/атрибут

0Ah

Писати символ

0bH

Обрати палітру/колір

0dH

Писати графічну крапку

0eH

Читати графічну крапку

OfH

Писати символ в режимі TTY

10H

Читати відеорежим1

11H

Генератор символів1

12H

Спеціальні функції1

При написанні програми були використані функції “Читати символ”, “Писати символ”,”Встановити відеорежим”.

Службова процедура системи BIOS для переривання 9 або переривання клавіатури визначає зміст кожної дії з клавіатурою. Це включає спостереження за станом зсуву кодів і перетворення натискань клавіші в їхні значення, будь те буква алфавіту або сигнали функціональних клавіш. Нижче ми будемо розглядати цю функцію докладніше.

Частина обслуговування клавіатури з боку системи BIOS полягає в спостереженні за всіма можливими станами зсувів. Стани зсувів досить часто викликають плутанину, оскільки клавіатура звичайної друкарської машинки, має усього одну клавішу зсуву, клавіатури багатьох комп’ютерів, у тому числі і IBM/PC, мають три типи зсувів.

По-перше, є звичайні функції клавіш, без усякого зсуву (наприклад, для одержання букв у нижньому регістрі). Потім є звичайний зсув, такий ж як у друкарських машинок, що служить для одержання букв верхнього регістра і, як правило, усіх знаків, нанесених на верхню частину клавіші. Крім того, є ще два види зсуву, що змінять зсув "ALT" і керуючий зсув "CTRL". Ці два спеціальних види зсуву використовуються аналогічно звичайному зсуву в тому змісті, що просто "а" не зовсім те ж саме, що "А" у верхньому регістрі, і Ctrl-A і Alt-A також мають власні значення (можна було б вважати клавішу "ESC" ще одною клавішею зсуву. Це пов'язано з тим, що в деяких старих терміналах комп'ютерів, особливо таких, що використовувалися подібно клавішам зсуву. Проте, при використанні клавіша "ESC" вона не утримувалася в натиснутому стані, подібно клавішам зсуву, – спочатку нажималась клавіша "ESC", а після її якась інша клавіша. Обидва цих натискання розглядалися як спеціальна послідовність. Таку дію не можна розглядати як операцію зсуву. Звичайно, клавіша "ESC" подібною уявою в IBM/PC не використовується.)

Припустимими рахуються не всі сполучення звичайних клавіш і клавіш зсуву. Якщо ввести одну з недопустимих комбінацій, то система BIOS її просто проігнорує, начебто нічого не відбулося. Дещо пізніше будуть перераховані всі допустимі комбінації зсувів клавіш.

Опис змісту окремих бітів приведено нижче.

Оскільки клавіша зсуву діють тільки в натиснутому стані, система BIOS стежить за їхніми натисканнями і звільненнями і вносить необхідні зміни в інтерпретацію звичайних клавіш. Система BIOS стежить за кодами сканування при звільненні тільки для клавіші зсуву, тому що для всіх інших клавіш ця функція не має змісту.

Коли система BIOS одержує код сканування звичайної клавіші, вона перевіряє усі варіанти зсуву і перетворює цей код у відповідне значення, що може бути як символьним кодом ASCII, так і кодом спеціального призначення.

    1. Розробка блок-схеми алгоритму програми

Структурна схема. Принцип роботи програми.

ПОЧАТОК

ні

Відкриття файлу

Помилка відкриття

так

КІНЕЦЬ

Читання з буферу

Загрузка шрифту у відеобуфер

Отримання адресу обробника переривання клавіатури

Встановлення власного обробника переривання клавіатури

Отримання адресу обробника графіки 10h

Видача повідомлення про помилку

1

1

Всановлення власного ообробника графіки 10h

A

Встановлення резидентної частини програми

КІНЕЦЬ

Перемикання признаку альтернативного набору

Очистка признаку натискання Shift

C

    1. Розробка блок-схеми алгоритмів окремих процедур

ОБРОБКА ПЕРЕРИВАННЯ 09H ПРОГРАМОЮ

ні

так

А

B

Очистка контролеру клавіатури

Дозвіл обробки апаратних переривань

Очистка біта відпускання клавіші

Це правий Shift?

так

C

ні

Признак натискання клавіші вста-новлений?

IRET

так

ні

Перевірка признаку альтернативо-го набору

так

ні

Очистка признаку альтернативного набору

C

C

ОБРОБКА ПЕРЕРИВАННЯ 10H

ні

ПОЧАТОК

Виклик обробника графіки BIOS10h

Виклик обробника графіки BIOS10h

Загрузка свого шрифту

так

ні

так

так

Функція зміни відеорежиму

Відео режим WB80x25?

Відео режим color80x25?

IRET

IRET

ні

ні

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]