КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Практичне завдання 1Стр 1 из 22Следующая ⇒ ЗМІСТ
ВСТУП. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Практичне завдання 1. Представлення інформації у цифровому вигляді. . . . 6
Практичне завдання 2. Програмування мовою Assembler. . . . . . . . . . .9
Практичне завдання 3. Порівняння мов програмування С/С++ та Паскаль. . . 13
Практичне завдання 4. Використання функцій ВІOS. . . . . . . . . . . . . . .25
Практичне завдання 5. Використання портів для обміну даними. . . . . . . . 38
Практичне завдання 6. Використання можливостей Win-32 API. . . . . . . . .52
Практичне завдання 7. Використання функцій вводу-виводу. . . . . . . . . . 62
Практичне завдання 8. Використання функції DeviceIoControl. . . . . . . . . 66
Практичне завдання 9. Використання драйвера. . . . . . . . . . . . . . . . . .71
Практичне завдання 10. Недокументований доступ до портів. . . . . . . . . .75
Додаток А. Програмні коди функцій користувача, які можуть використовуватися при читанні і записі інформації на зовнішніх пристроях. .82
Додаток Б. Функції користувача для читання сектора з диску і запису на диск з використанням функції DeviceIoControl. . . . . . . . . . . . . . . . . . . . . 85
Додаток В. Класи для читання і запису інформації з використанням драйвера для роботи в Windows 98/ME з портами. . . . . . . . . . . . . . . . . . . . . . 88
Додаток Г. Приклади програм класів недокументованого доступу до портів в операційних системах Windows 95/98/ME. . . . . . . . . . . . . . . . . . . . . 91 Список використаних джерел. . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Вступ Перед тим, як приступити до курсу практичних робіт з системного програмування, перейти до програмування системних функцій та апаратного програмування пристроїв в операційних системах сімейства Windows, потрібно насамперед розібратися в основних принципах доступу до апаратної частини комп’ютера під цими системами. А вони, на превеликий жаль, досить дещо збіднені і, я б сказав, однобокі. Існують як мінімум чотири офіційних способи прямого доступу до комп’ютерного устаткування, якщо так можна назвати на даному рівні: 1. Перший полягає в звичайному використанні набору функцій вводу-виводу: _outp, _outpw, _outpd, _inp, _inpw, _inpd. Вони входять до складу бібліотеки часу виконання, але їх використання досить сильно залежить від операційної системи. Практично всі нові системи Windows не дозволяють працювати з цими функціями в вільно доступному режимі програмування. 2. Другий спосіб базується на застосуванні універсальної ресурсної функції вводу-виводу DeviceIoControl. Головна перевага при її застосуванні полягає в однозначній підтримці даної функції всіма системами Windows, починаючи Windows95 і закінчуючи останніми версіями - Windows SR3 Windows Vista. Але у цієї функції є один серйозний недолік – це дуже обмежений діапазон її застосування. Не дивлячись на те, що вона дозволяє здійснювати роботу з дисковою системою і з новітніми інтерфейсами передачі даних, отримати прямий доступ до пристроїв за її допомогою не вдається. 3. Третій спосіб полягає в банальному створенні драйвера (наприклад, віртуального драйвера пристрою), що дозволяє отримати необмежений доступ до всіх пристроїв в системі. Крім того, даний варіант прекрасно буде працювати у всіх операційних системах Windows. Основний недостаток цього методу полягає у відносній складності написання програмного коду самого драйвера, а також необхідність створення окремого варіанта драйвера для кожної операційної системи зокрема. Наприклад, якщо програма написана під Windows 98 і Windows 2000, то доведеться писати два різні драйвери під кожну систему. 4. Останній спосіб полягає в використанні «вмонтованого» в (Visual) C++ макроасемблера. Він не дозволяє застосовувати переривання, тому що Windows буде зависати, проте зовсім непогано працює з апаратними портами. Оскільки кожен із підходів заслуговує уваги в області системного програмування, розробляючи наш курс методичного посібника, ми будемо посилатися на усі ці підходи. Зразу слід відмітити, що вибір того чи іншого підходу із вищепредставлених варіантів буде цілком залежати, в першу чергу, від версії операційної системи, а потім тільки від поставлених завдань програмування. Із цим потрібно примиритися, так як обійти його практично неможливо. Це полягає в тому, що фірма Microsoft з кожним роком, розробляючи нові версії операційної системи Windows, все менше і менше залишає можливостей прямого доступу до пристроїв. Це можна зрозуміти, знаючи, що такий підхід веде до підвищення надійності операційної системи, з однієї сторони, але з іншої сторони,- блокується розвиток конкурентного і часто більш якісного програмного забезпечення. Протягом висвітлення методичного матеріалу ми розберемо базові підходи самих інструментів системного програмування на практиці, тобто елементи асемблера, базові знання з мови програмування С/С++ та їх застосування на практиці програмування, а потім звернемося до альтернативних варіантів програмування апаратних засобів за допомогою уже згаданих інструментів програмування, можливостей операційної системи Windows та її базових понять. Слід наголосити, що ця задача не буде виконуватися в широкомасштабному варіанті програмування для всіх зовнішніх пристроїв, так як такий курс є набагато тривалішим в розподілі часу, а тільки для пристрою клавіатури як одного із головних терміналів вводу інформації. Додамо, що інші пристрої апаратури комп’ютера програмуються такими ж підходами із застосуванням тих же мовних інструментів програмування, набору ресурсів та функції.
Практичне завдання 1
|