Резидентна програма для виведення статистики про наявні пристрої в ПК

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

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

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

Рік:
2010
Тип роботи:
Інші
Предмет:
Системне програмування та операційні системи
Група:
КН

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Кафедра "Інформаційні системи та мережі " К У Р С О В А Р О Б О Т А з дисципліни "Системне програмування та операційні системи" на тему: “Резидентна програма для виведення статистики про наявні пристрої в ПК ” ЗАВДАННЯ на курсову роботу з дисципліни “ Системне програмування та операційні системи ” студента групи КН-26 Бориса Остапа на тему: “Резидентна програма виведення статистики про наявні пристрої в ПК” 1. Провести огляд літературних джерел по заданій темі для аналізу методів розв’язування задачі. 26.02  2. Методи та засоби розв’язування задачі. 26.03  3. Виконати програмну реалізацію розроблених алгоритмів. Вимоги до програми: програма повинна бути реалізована мовою Intel Assembler; програма повинна працювати у вікні MSDOS під керуванням операційної системи Windows; програма повинна мати інтерфейс для вибору режимів її роботи; інтерфейс може бути реалізований мовами С/C++. 30.04  4. Підготувати вхідні дані та виконати реалізацію контрольного прикладу. 14.05  5. Оформити записку до курсової роботи згідно з вимогами Міжнародних стандартів, дотримуючись такого змісту: -вступ; -формулювання задачі; -методи та засоби розв’язування задачі; -алгоритми розв'язування задачі; -опис програми; -технологія програмування, виконання та відлагодження програми; -інструкція користувачеві; -контрольний приклад та результати роботи програми; -висновки; -література; -додатки. 28.05   ЗАВДАННЯ ПРИЙНЯТО ДО ВИКОНАННЯ: ____________15.02.2010 підпис студента Керівник роботи: ____________/Ришковець Ю. В./ ЗМІСТ Вступ 4 1. Формулювання задачі 5 2. Методи та засоби розв’язування задачі 5 3. Алгоритми розв’язування задачі 12 4. Програма та її опис 14 4. 1. Назва програми 14 4. 2. Призначення програми 14 4. 3. Мови програмування, на яких написана програма 14 4. 4. Логічна структура програми 15 4. 5. Вхідні та вихідні дані 16 4. 6. Програмні засоби 16 4. 7. Технічні засоби 16 5. Технологія програмування, виконання, відлагодження програми. 17 5. 1. Технологія програмування 17 5. 2. Технологія виконання програми 17 5. 3. Відлагодження програми 17 5. 4. Надійність програми у межах зміни вхідних даних 18 5. 5. Контрольний приклад та аналіз компютерної реалізації програми…….. 18 6. Інструкція користувачеві 19 Висновки 19 Список використаної літератури 20 Додаток 1. Текст програми на мові Assembler 21 ВСТУП Метою виконання курсової роботи є закріплення теоретичних знань та практичних навичок програмування, набутих при вивченні дисциплін “Системне програмування та операційні системи”. В ході виконання курсової роботи студенти повинні навчитися самостійно працювати з літературою, розробляти алгоритми, здійснювати їх програмну реалізацію та відлагодження на сучасних обчислювальних системах. Моє індивідуальне завдання на курсову роботу, полягає у розробці резидентної програми для виведення інформації про наявні пристрої в ПК. Майже кожному може знадобитися інформація про пристрої в ПК, але для того, щоб її дізнатися потрібно розбирати системний блок , також можна дізнатися за допомогою спеціального програмного забезпечення, але його потрібно купувати. Саме для того, щоб це не робити мною розроблена програма на мові асемблера на тему: “ Резидентна програма виведення статистики про наявні пристрої в ПК ”. ФОРМУЛЮВАННЯ ЗАДАЧІ Програми мовою Асемблер дуже точні. Ця мова дозволяє програмістові безпосередньо працювати з усім апаратним забезпеченням, тобто програми на Асемблері можуть робити те, що недоступно програмам, написаним на будь-якій іншій мові. Безсумнівно, що в програмуванні пристроїв, де потрібен контроль над окремими розрядами регістрів пристрою, програмування мовою Асемблер – єдиний оптимальний вихід. Дана програма, написана мовою Асемблер, призначена для визначення інформації про наявні пристрої в ПК. Працює в DOS/Wіn9x, NT, XP із правами адміністратора. Програма може використовуватись будь-ким. Вона повинна відповідати таким системним вимогам : Операційна система – DOS, Windows 3.1 або старша, пам’ять - 2M і вище. МЕТОДИ ТА ЗАСОБИ РОЗВЯЗУВАННЯ ЗАДАЧІ Резидентна програма - програма, яка потрапляє в оперативну пам'ять при запуску і знаходяться там до вимкнення програми, або, що найбільш типово, перезавантаження комп'ютера. Резидентна програма складається з двох частин: резидентна - один або декілька обробників переривань; секція ініціалізації - запускається, розміщує в оперативній пам'яті відповідні обробники переривань, настроює на ці обробники вектори переривань, далі завершує роботу так, щоб в оперативній пам'яті залишилась резидентна частина. Наприклад: 21h - переривання, 31h - функція, яка залишає в пам'яті обробник переривання. Мова Асемблер – це система запису програми з деталізацією до окремої машинної команди, яка дозволяє використовувати позначення команд і символічне задання адрес. Написання асемблер них програм потребує знань організації всієї системи комп’ютера. В основі комп’ютера лежить поняття біта і байта. Вони являються тим засобом, завдяки яким в комп’ютерній пам’яті представлені дані і команди. Програма в машинному коді складається з різних сегментів для визначення даних, для машинних команд і для сегмента, який називається стеком, для зберігання адрес. Для виконання арифметичних дій, пересилання даних і адресації комп’ютер має ряд регістрів . Оскільки в різних апаратних архітектурах різні програмно-доступні компоненти (система команд, регістри, способи адресування), мова Асемблер є апаратно-зележною. Програми, написані на мові Асемблер можуть бути перенесені тільки на обчислювальну систему з такою ж архітектурою. Програмування на Асемблері дозволяє максимально використати особливості архітектури обчислювальної системи. Донедавна було аксіомою те, що асемблерна програма завжди є більш ефективною і в сенсі швидкодії, і в сенсі вимог до пам’яті. Програма в машинному коді складається з різних сегментів для визначення даних, для машинних команд і для сегменту, який називається стеком, для зберігання адрес. Для виконання арифметичних дій, пересилання даних і адресації комп’ютер має ряд регістрів. Для виконання програм комп’ютер тимчасово записує програму і дані в основну пам'ять. Комп’ютер також має ряд регістрів, які він використовує для тимчасових обчислень. Програма на мові Intel Assembler може складатися із одного або декількох сегментів. Сегментом програми називається та її частина, що складається із команд чи даних, розміри яких не перевищують 64 Кбайт. Існує три основних сегменти програми: сегмент стеку; сегмент коду; сегмент даних. Сегмент стеку – ділянка пам’яті, відведена під стек. Потрібно пам’ятати, що навіть якщо ви в своїй програмі не використовуєте стек, в програмі треба описати сегмент стеку. Це необхідно в міру того, що стек програми використовує операційна система при опрацюванні переривань, які виникають в процесі роботи програми. Сегмент коду – це сегмент, в якому знаходяться команди. Це основний сегмент програми, аналог функції MAIN у мові програмування С чи С++, з якої починається виконання програми. Сегмент даних – це сегмент, в якому знаходяться дані, що використовуються у програмі. Мова програмування Асемблер дозволяє змінювати структуру програми як завгодно, наприклад, заносити дані в сегмент коду, розбивати код на будь-яку кількість сегментів або взагалі використовувати тільки один сегмент для всієї програми. Команда mov використовується для копіювання значення з одного місця в інше. Цим місцем може бути регістр, комірка пам’яті чи безпосереднє значення (тільки як вихідне значення). Стек – це область пам’яті, на яку вказує регістр стеку ESP. Стек є місцем для збереження адрес повернення і тимчасових значень. Існують дві команди для розміщення значення в стеку і вивільнення його зі стеку: PUSH і POP. Команда PUSH розміщує значення в стеку, тобто поміщає значення в комірку пам’яті, на яку вказує регістр ESP, після цього значення цього регістру збільшується на 4. Команда РОР вивільняє значення із стеку, тобто вивільняє з комірки пам’яті, на яку вказує регістр ESP, після цього зменшує значення регістру ESP на 4. Значення, яке поміщається у стек, вивільняється першим. При поміщенні значення в стек, вказівник стеку зменшується, а при вивільненні – збільшується. Регістр є пристроєм тимчасового зберігання даних і використається з метою полегшення арифметичних, логічних операцій. Вісім регістрів загального призначення мають довжину в 32 біт і містять адреси або дані. Вони підтримують операнди: - дані довжиною 1, 8, 16, 32 і 64 біт; - бітові поля від 1 до 32 біт; - операнди - адреси довжиною 16 і 32 біт. Ці регістри називаються EAX, EBX, ECX, EDX, ESІ, EDІ, EBP, ESP. Доступ до молодших 16 біт цих регістрів виконується незалежно. Для коректної обробки даних в асемблері потрібна розгалуженість програми. Це досягається використанням умовних переходів. Умовний перехід – це така команда процесора, при якій, в залежності від стану регістру прапорців відбувається передача управління по деякій адресі, іншими словами – стрибок. Ця адреса може бути близькою або далекою. Стрибок вважається близьким, якщо адреса, на якій робиться стрибок, знаходиться не далі, ніж 128 байт назад і 127 байт вперед від наступної команди. Дальній стрибок – це стрибок далі, ніж на [-128, 127] байт. Кожна команда змінює регістр прапорців в залежності від результату своєї операції. Зазвичай перед командою стрибка йде команда порівняння, яка змінює свій регістр прапорців в залежності від результату. Регістр прапорців має набір прапорців, які встановлюються в залежності від обчислень чи інших подій. Алгоритм виконання програми заставляє його виконувати програми один за одною, в тому порядку, як вони були описані у вихідному тексті програми і містяться у виконуваному модулі. Однак часто необхідно порушити цей порядок, заставивши процесор обійти якусь частину програми, перейти на виконання іншої гілки чи передати управління програмі, тобто після її завершення повернутися на попереднє місце. Всі ці операції здійснюються за допомогою команд переходів. Переходи поділяються на безумовні, коли передача управління в іншу точку програми здійснюється у безумовному порядку, незалежно від будь-яких обставин, і умовні, здійснювані чи не здійснювані в залежності від тих чи інших умов: результатів порівняння, аналізу, пошуку. Безумовні переходи поділяються на власне переходи (без повернення в точку переходу) і виклики підпрограм (з поверненням після завершення підпрограми) . Операції переходів і викликів підпрограм, поміж їх практичної цінності, представляють значну методичну цікавість, так як зачіпають основу архітектури процесора – сегментну адресацію пам’яті. Багаточисельні різновиди команд переходів і викликів зобов’язані своїм існуванням не стільки потребам практичного програмування, стільки принциповим архітектурним особливостям процесора. Безумовні переходи здійснюються за допомогою команди jmp, яка може ви користуватися в 5 різних видах. Перехід може бути: прямим коротким (в межах -128… + 127 байтів); прямим близьким (в межах поточного сегменту команд); прямим далеким (в інший сегмент команд); непрямий близький (в межах поточного сегменту команд через комірку з адресою переходу); непрямий далекий (в інший сегмент команд через комірку з адресою переходу). Прямим називається перехід, в команді якого в явній формі вказується мітка, на яку потрібно перейти. Звісно, ця мітка повинна бути присутньою в тому ж програмному сегменті, при цьому позначена нею команда може знаходитися к до так і після команди jmp. Прямий близький відрізняється від прямого тільки тим, що під зміщення до точки переходу відводиться ціле число. Це дає можливість здійснити перехід в будь-яку точку 64-кбайтного сегменту. Прямий далекий перехід дозволяє передати управління в будь-яку точку будь-якого сегменту. При цьому, очевидно, що програмний комплекс включає декілька сегментів команд. Команди непрямих переходів можуть використовувати різні способи адресації і, відповідно, мати багато різних варіантів. Непрямий далекий перехід здійснюється за адресою, яка міститься в комірці памяті, однак ця комірка має розмір 2 слова і в ній міститься повна (сегмент плюс зміщення) адреса точки переходу. Основне призначення підпрограм – це скорочення коду основної програми: одні і ті ж інструкції не потрібно писати декілька разів – їх можна обєднати в підпрограми і викликати по мірі необхідності. Для виклику підпрорами використовується команда CALL, а для повернення з підпрограми в основну программу – RET. Формат обидвох команд такий: CALL тип_вызова операнды RET Команді CALL необхідно передати всього один операнд – адресу підпрограми. Це може бути безпосереднє значення, зміст регістру, памяті чи мітка. На відміну від JMP, при виконанні команди CALL перш за все зберігається у стеку значення регістру ІР (ЕІР). Передача управління на вказану адресу називається викликом підпрограми. Як і команді JMP, команді CALL можна вказати «розмір кроку». Повернення із підпрограми виконується за допомогою команди RET, яка виштовхує із стеку його вершину в ІР (ЕІР). Після цього процессор продовжить виконання інструкцій, які знаходятся в основній програмі після команди CALL [2]. Для розв'язку поставленої задачі я використав компілятор TASM 4.1. Розробляв та запускав у операційній системі Windows XP SP3. Для набирання програми використовував текстовий редактор “PSPad”, а для компіляції – наступний BAT-файл: del %1.exe tasm /zi %1.asm tlink /v %1.obj del %1.obj del %1.map АЛГОРИТМ РОЗВЯЗУВАННЯ ЗАДАЧІ Для реалізації алгоритму задачі мною були проведені наступні дії. Я почав з підключення мікропроцесора 386, вибрав модель пам’яті flat, оголосив значення параметра функції GetStdHandle, параметри, що передаються в процедуру Ring0_GetDevInfo, параметри пристрою IDE/ATAPI, далі оголосив сегмент даних. В сегменті даних оголосив такі змінні: szPriMaster DB "=========Primary Master===========", 0Dh, 0Ah, 0 szPriSlave DB "============Primary Slave==========", 0Dh, 0Ah, 0 szSecMaster DB "==============Secondary Master=====", 0Dh, 0Ah, 0 szSecSlave DB "===========Secondary Slave=========", 0Dh, 0Ah, 0 szTerMaster DB "===========Tertiary Master=========", 0Dh, 0Ah, 0 szTerSlave DB "==========Tertiary Slave===========", 0Dh, 0Ah, 0 szQuaMaster DB "==========Quaternary Master========", 0Dh, 0Ah, 0 szQuaSlave DB "==========Quaternary Slave=========", 0Dh, 0Ah, 0 szDevice DB " Device: %s", 0Dh, 0Ah, 0 szModel DB " Model: %s", 0Dh, 0Ah, 0 szFirmwareRev DB "Firmware Revision: %s", 0Dh, 0Ah, 0 szSerNum DB " Serial Number: %s", 0Dh, 0Ah, 0 szHDD DB "HDD %uM", 0 szUnknown DB "Unknown", 0 szPressAnyKey DB 0Dh, 0Ah, "Press any key...", 0 DevInfo DW 256 DUP(?) Після ініціалізації змінних відбувається зчитування системних даних, сканування пристрою IDE/ATAPI, отримання інформації про пристрій IDE/ATAPI, вивід інформації про пристрій IDE/ATAPI (тип пристрою, його модель, мікропрограмний номер, серійний номер).  Рис. 1. Блок-схема алгоритму програми 4. ОПИС ПРОГРАМИ 4. 1. Назва програми. kurs 4. 2. Призначення програми. За допомогою цієї програми можна отримати інформацію наявні пристрої в ПК. 4. 3. Мова програмування на якій написана програма. Assembler – система програмування, яка включає мову асемблера та транслятор цієї мови. Є мовою програмування низького рівня. Іншими словами – програма, яка перекладає текст з мови, зрозумілої людині, в мову, зрозумілу процесору, тобто, можна сказати, що вона перекладає мову асемблера в машинний код. В повсякденній мові, а тепер і в літературі слово «асемблер» стало також назвою мови програмування. Assembler - мова програмування, за допомогою якого можна написати такі програми, які неможливо, або дуже складно написати на інших мовах програмування. Мова асемблера — це мова, на якій "говорить" процесор, і зникнути він може тільки разом із зникненням процесорів! З цієї ж причини асемблер має одну фундаментальну перевагу перед мовами високого рівня: він найшвидший. Більшість додатків, що працюють в режимі реального часу, або написані на асемблері, або використовують в критичних ділянках коди асемблерні модулі. Нерідко можна чути твердження про те, що процес розробки програм на мові асемблера дуже трудомісткий і віднімає масу часу. Ще однією перешкодою для роботи з асемблером рахують його складність. І, нарешті, як аргумент приводиться твердження, що розробка додатків на асемблері сильно утруднена через відсутність сучасних інструментальних засобів для проектування і відладки. Такі твердження, взагалі-то, не відповідають дійсності. Мова асемблера не складніше за інші мови програмування і досить легко освоюється як досвідченими, так і початкуючими програмістами. Крім того, останніми роками з'явилися дуже могутні інструментальні засоби розробки програм на асемблері, і це вимушує по-іншому поглянути на процес розробки програм на цій мові. Серед таких інструментальних засобів проектування можна назвати макроасемблер. Текст програми на мові асемблера записується в один або кілька файлів, імена файлів і їх розширення можуть бути будь-які, прийнято для файлів які містять програми мовою асемблера прийнято використовувати розширення *.asm. Для файлів визначених констант і повних типів розширення *.inc. Ці файли є текстовими їх можна набрати в будь-якому текстовому редакторі. Можна також використати інтегровані середовища для розробки програм, при програмуванні зручно виділяти один каталог для збереження всіх файлів програми і звідти запускати всі необхідні програми для підготовки, асемблювання та компонування програми. При використанні стандартних редакторів тексту, редаговані тексти треба зберігати у вигляді звичайних файлів у форматі ASCII, це означає, що ці файли треба зберігати без додаткових символів, ці символи часто вставляють в текст різні спеціалізовані редактори. Підготовлений текст мови асемблер є початковим для спеціальних програм, які називаються асемблерами, далі програма асемблера. Задача програми асемблера перетворити текст програми у форму двійкових команд, останні можуть вже бути виконанні мікропроцесором. Після асемблювання дістають так звані файли об’єктних модулів, які мають відповідні розширення *.obj. Для отримання об’єктних файлів необхідного виконати відповідну програму асемблера masm фірми Microsoft, або tasm фірми Borland. В обох випадках після команди вказується ім’я файлу : masm prog1.asm, tasm prog1.asm. Така форма команди є мінімальною, крім цієї форми можна використовувати іншу форму задаючи перед іменем файлу опції або ключі. Якщо програма складається з декількох файлів, то їх асемблювання проводиться незалежно один від одного, хоча отримані об’єктні файли представлені вже в двійковій формі запускати їх на виконання не можливо. Мова програмування асемблер дозволяє змінювати структуру програми як завгодно, наприклад, заносити дані в сегмент коду, розбивати код на будь-яку кількість сегментів або взагалі використовувати тільки один сегмент для всієї програми. 4. 4. Логічна структура програми. Структура даної програми містить у собі невелику кількість процедур, але ця кількість є достатньою для безпомилкового функціонування і для її простого розуміння з боку інших програмістів. Програма працює лінійно, покроково виконуючи всі оператори. Процедура PrintDevInfo виводить інформацію про пристрій IDE/ATAPI . Використовує функції: lstrcpynA, printf. Виклик відбувається з регістра EDI – буфера з інформацією про пристрій. Змінювані регістри: EAX,ECX,EDX,Flags. За допомогою процедури W9x_GetDevInfo отримуємо інформацію про пристрій IDE/ATAPI (для Win9x). Використовує функції: Ring0Call, Ring0_GetDevInfo. Виклик відбувається у регістрах: DX- базовий порт, AL - номер пристрою, EDI - буфер для інформації про пристрій. Повернення у регістр EAX – прапорець вдалого/невдалого завершення. Змінні регістри: EAX,ECX,DX,Flags. Завдяки процедурі Ring0_GetDevInfo отримуємо інформацію про пристрій IDE/ATAPI (викликається з Ring 0). Використовує функції: DetectATAPIDev, GetATAPIDevInfo, GetIDEDevInfo. Виклик відбувається у регістрі ECX, в якому містяться параметри для отримання інформації(GETDEVINFOPARAMS). Повернення в регістр EAX – прапорець успішного/невдалого завершення. Змінні регістри: EAX,ECX,DX,Flags. 4. 5. Вхідні та вихідні дані. Більшість даних програми є змінними. Так як для визначення інформації про жорсткий диск потрібно за стандартною схемою оголошувати всі дані – тип пристрою, модель, мікропрограмний номер, серійний номер. А також константами є повідомлення від клавіатури, а також атрибути файлової директорії. 4. 6. Програмні засоби. Завдяки особливостям мови програмування Assembler для використання даної програми не потрібно ніяких особливих програмних засобів. Після створення ехе-файлу, дана програма працює в DOS/Wіn9x, NT, XP з правами адміністратора. Також вона відповідає таким системним вимогам : операційна система – DOS, Windows 3.1 або старша, пам’ять - 2M і вище. А оскільки більшість користувачів використовують саме такі операційні системи можна вважати, що дана програма є мобільною, тобто без значних змін виконується на різних комп’ютерах. Правда компілювання програми відбувалося з допомогою використання оновленої версії середовища Асемблеру, а зокрема – VGM Assembler 1.0. 4. 7. Технічні засоби. Розроблена програма може бути переміщена на будь-який комп’ютер, завдяки переносним засобам інформації. Комп’ютер на якому ми хочемо використовувати програму повинен відповідати таким системним вимогам: операційна система – DOS, Windows 3.1 або старша, пам’ять - 2MВ і вище. Отож, якщо користувач має усі вище перераховані технічні засоби, він може користуватися програмою, розробленою протягом курсової роботи. 5. ТЕХНОЛОГІЯ ПРОГРАМУВАНЯ, ВИКОНАННЯ ТА ВІДЛАГОДЖЕННЯ ПРОГРАМИ 5. 1. Технологія програмування Програма була неодноразово протестована із різними значеннями вхідних параметрів. Неодноразово під час виконання виявлялися похибки (більшість із них пов’язана із синтаксисом функцій). Всі помилки пов’язані з правильним написанням функцій були локалізовані і виправлені. 5. 2. Технологія виконання програми Для запуску програми з носія необхідно знайти файл з розширенням .ехе і після цього натиснути Enter. В результаті цього на екран буде виведена інформація про наявні пристрої в ПК. 5. 3. Відлагодження програми. Для успішного написання програми її від лагодження повинно відбуватися покроково. Тобто після написання якоїсь частини програми (це може бути підпрограма) виконується компіляція, пошук помилок та їх виправлення. Потрібно пам’ятати, що ті помилки, які показує компілятор, не завжди стосуються саме тих частин на які він вказує. Причина може виявитися у попередніх операторах. Також слід не забувати, що компілятор не показує логічних помилок, які ми створюємо. Тому перед запуском програми необхідно перевірии її на наявність таких помилок. У таких випадках прийде на допомогу попередньо розроблений алгоритм розв’язування задачі. 5. 4. Надійність програми у межах зміни вхідних даних. Програма є надійною стосовно зміни вхідних даних. Поданий файл є стійким і відповідає вимогам до структурованої інформації. 5. 5. Контрольний приклад та аналіз комп’ютерної реалізації програми Щоб протестувати програму необхідно її запустити і перевірити чи коректно виводиться інформація про жорсткий диск, а саме тип пристрою, його модель, мікропрограмний номер, серійний номер. В результаті останнього запуску програми я отримав це зображення:  Рис. 2. Результат виконання програми Проаналізувавши результати даного контрольного тестування програми можна зробити висновок, що програма працює правильно. Оскільки результати, які ми отримали в результаті комп’ютерної реалізації програми співпадають з результатами, які ми отримали при ручній перевірці. Необхідно звернути увагу на те, що результати роботи програми ми отримали швидко, що дозволяє користувачу не затримуватися і продовжити свою роботу над іншим проектом, за необхідності. Робота даної програми не займає великої кількості пам’яті, що є вигідним для користувача. Також необхідно замітити, що інтерфейс розробленої програми не є виснажливим для людського ока, що в свою чергу дозволяє користувачеві провести більшу кількість часу перед екраном монітора 6. ІНСТРУКЦІЯ КОРИСТУВАЧЕВІ Інтерфейс програми є зручним, інтуїтивно зрозумілим, простим у користуванні і не потребує додаткових зусиль. Управління програмою реалізоване за допомогою миші і відповідає програмному інтерфейсу. Дана програма може використовуватися у різних операційних системах. Працює в DOS/Wіn9x, NT, XP з правами адміністратора, пам’ять - 2M і вище. У будь-якій операційній системі для того, щоб запустити програму необхідно клацнути або виділити і натиснути клавішу Enter, на файлі розширення якого є .ехе. Це файл з назвою kurs.exe. Інтерфейс програми є зручним, інтуїтивно зрозумілим, простим у користуванні і не потребує додаткових зусиль. Управління програмою реалізоване за допомогою клавіатури і відповідає програмному інтерфейсу. Після запуску програми появляється вікно з результатами запитів: тип пристрою, його модель, мікропрограмний номер, серійний номер. Для успішного виходу з програми натисніть будь-яку клавішу. ВИСНОВОК В ході виконання курсової роботи я закріпив практичні навички, набуті під час вивчення курсу “Системне програмування та операційні системи”. Крім того я навчився самостійно опрацьовувати навчальну літеретуру, розробляти алгоритми та програмно втілювати їх. Я написав “Резидентну програму для визначення інформації про наявні пристрої в ПК ”, яка виводить інформацію про пристрої за допомогою інтерфейсу ІDE/ATAPІ, зокрема серійних номерів. До позитивних сторін цієї програми можна віднести її мобільність, тобто програма без змін може використовуватися на різних комп’ютерах. Також дана програма може використовуватися у різних операційних системах, а саме в DOS/Wіn9x, NT, XP з правами адміністратора. Інтерфейс розробленої навчальної підсистеми є надзвичайно простим у використанні та є маловиснажливим для людського ока, що у свою чергу , дозволить користувачеві провести більше часу за комп’ютером, при користуванні програмою. До недоліків програми можна віднести керування програмою тільки за допомогою клавіатури. Необхідно пам’ятати, що кожна програма має свої особливості написання, тому алгоритми розроблені для інших програм, можуть лише полегшити написання програми , або вказати вірний напрямок для написання алгоритму. Список використаної літератури: Методичні вказівки до курсової роботи з дисциплiни "Системне програмування" для студентів спеціальності “Інтелектуальні системи прийняття рішень” / Укл. П.О.Кравець. - Львів: Видавництво Національного університету “Львівська політехніка”, 2008. - 19 с. Рудольф Марек "Ассемблер на примерах. Базовый курс". – СПб: Наука и техника, 2005. – 240с. Финогенов К. Г. "Основы языка Ассемблера" Абель Питер. Язык Ассемблера для IBM PC и программирования. - М., "Высшая школа",1992. – 423c. Зубков Д. Д. Программирование на Assembler для DOS, WINDOWS и UNIX. М., ДМК, 2000. – 325c. Додаток 1. Текст програми на мові Assembler .386 LOCALS .MODEL FLAT L EQU <LARGE> ; Значення параметра функції GetStdHandle STD_INPUT_HANDLE EQU -10 ; дескриптор стандартного вхідного потоку STD_OUTPUT_HANDLE EQU -11 ; дескриптор стандартного вихідного потоку STD_ERROR_HANDLE EQU -12 ; дескриптор стандартного потоку помилок ;******************************************************************* ;Параметри пристрою IDE/ATAPI ;******************************************************************** SCANDEVENTRY STRUC sde_wBasePort DW ? sde_bDevNum DB ? sde_lpszPort DD ? SCANDEVENTRY ENDS EXTRN hStdOut:DWORD EXTRN ExitProcess:PROC EXTRN GetStdHandle:PROC EXTRN WaitForSingleObject:PROC EXTRN _wsprintfA:PROC EXTRN lstrcpynA:PROC EXTRN GetVersionExA:PROC .DATA szPriMaster DB "=========Primary Master===========", 0Dh, 0Ah, 0 szPriSlave DB "============Primary Slave==========", 0Dh, 0Ah, 0 szSecMaster DB "==============Secondary Master=====", 0Dh, 0Ah, 0 szSecSlave DB "===========Secondary Slave=========", 0Dh, 0Ah, 0 szTerMaster DB "===========Tertiary Master=========", 0Dh, 0Ah, 0 szTerSlave DB "==========Tertiary Slave===========", 0Dh, 0Ah, 0 szQuaMaster DB "==========Quaternary Master========", 0Dh, 0Ah, 0 szQuaSlave DB "==========Quaternary Slave=========", 0Dh, 0Ah, 0 szDevice DB " Device: %s", 0Dh, 0Ah, 0 szModel DB " Model: %s", 0Dh, 0Ah, 0 szFirmwareRev DB "Firmware Revision: %s", 0Dh, 0Ah, 0 szSerNum DB " Serial Number: %s", 0Dh, 0Ah, 0 szHDD DB "HDD %uM", 0 szUnknown DB "Unknown", 0 szPressAnyKey DB 0Dh, 0Ah, "Press any key...", 0 ScanDevices SCANDEVENTRY <1F0h,0,OFFSET szPriMaster> SCANDEVENTRY <1F0h,1,OFFSET szPriSlave> SCANDEVENTRY <170h,2,OFFSET szSecMaster> SCANDEVENTRY <170h,3,OFFSET szSecSlave> SCANDEVENTRY <1E8h,4,OFFSET szTerMaster> SCANDEVENTRY <1E8h,5,OFFSET szTerSlave> SCANDEVENTRY <168h,6,OFFSET szQuaMaster> SCANDEVENTRY <168h,7,OFFSET szQuaSlave> SCANDEVICESCOUNT = ($-ScanDevices)/SIZE SCANDEVENTRY .DATA? DevInfo DW 256 DUP(?) .CODE EXTRN puts:PROC EXTRN fputs:PROC EXTRN printf:PROC EXTRN Ring0Call:PROC EXTRN GetATAPIDevInfo:PROC ; отримання інформації про пристрій ATAPI EXTRN GetIDEDevInfo:PROC ; отримання інформації про пристрій IDE EXTRN DetectATAPIDev:PROC ; перевірка чи пристрій ATAPI EXTRN NT_GetDevInfo:PROC Start: push L STD_OUTPUT_HANDLE call GetStdHandle inc eax jz Exit ; якщо еах = 0 - перехід на Exit, інакше - якщо еах = 1 dec eax mov [hStdOut],eax mov ebp,OFFSET W9x_GetDevInfo ; ebp = інформація про IDE/ATAPI(Win9x) jnz @@ScanDevices ; якщо недорівнює 0 - перехід mov ebp,OFFSET NT_GetDevInfo @@ScanDevices: ;Сканування пристрою IDE/ATAPI mov esi,OFFSET ScanDevices ;ESI -> ScanDevices mov edi,OFFSET DevInfo ;EDI -> DevInfo mov ecx,SCANDEVICESCOUNT @@DevLoop: push ecx ;Отримання інформації про пристрій IDE/ATAPI mov dx,[(SCANDEVENTRY PTR esi).sde_wBasePort] mov al,[(SCANDEVENTRY PTR esi).sde_bDevNum] call ebp or eax,eax ;інформація отримана? jz @@NextDev ; перехід, якщо =0, інакше - якщо =1 ;Вивід інформації про пристрій IDE/ATAPI push [(SCANDEVENTRY PTR esi).sde_lpszPort] call puts call PrintDevInfo ; вивід інформації про пристрій IDE/ATAPI @@NextDev: pop ecx add esi,SIZE SCANDEVENTRY loop @@DevLoop ;Очікування натискання клавіші push L STD_ERROR_HANDLE call GetStdHandle ; виведення повідомлення "Press any key" push L OFFSET szPressAnyKey push eax call fputs push L STD_INPUT_HANDLE call GetStdHandle inc eax jz Exit dec eax push L 0FFFFFFFFh push eax call WaitForSingleObject Exit: push L 0 call ExitProcess ;******************************************************************** ;PrintDevInfo вивід інформації про пристрій IDE/ATAPI ;******************************************************************** ;Використовує: lstrcpynA, printf ; ;Виклик: EDI -> буфер з інформацією про пристрій ; ;Виклик: ні ; ;Змінювані регістри: EAX,ECX,EDX,Flags ;******************************************************************** PrintDevInfo PROC LOCAL @@szTemp:BYTE:64 = LOCAL_SIZE enter LOCAL_SIZE,0 push esi lea esi,[@@szTemp] ;ESI -> @@szTemp ;Тип пристрою mov al,[edi+1] test al,80h ;пристрій ATAPI? jz @@IDE and al,1Fh ;AL = тип пристрою ATAPI cmp al,5 mov eax,OFFSET szUnknown je @@PrintDeviceType mov eax,OFFSET szUnknown jmp @@PrintDeviceType @@IDE: ; Жорсткий диск IDE mov eax,DWORD PTR [edi+120] ;EAX = загальна кількість секторів ;в режимі LBA cmp eax,16515072 jae @@GetSizeInMB ; перехід, якщо більше рівне для цілого без знаку movzx eax,WORD PTR [edi+2] movzx ecx,WORD PTR [edi+6] mul ecx movzx ecx,WORD PTR [edi+12] mul ecx ;визначити розмір в Мб @@GetSizeInMB: mov ecx,512 mul ecx ; есх = есх * 512 mov ecx,500000 div ecx ; есх\500000 shr eax,1 ; зсув есх на 1 розряд adc eax,0 ; еах = еах + 0 push eax push L OFFSET szHDD push esi call _wsprintfA add esp,12 mov eax,esi
Антиботан аватар за замовчуванням

20.05.2013 22:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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