Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

00.000 ПЗ ЗМІСТ ВСТУП5 1 ПОСТАНОВКА ЗАВДАННЯ7 2 КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ8 2

Работа добавлена на сайт samzan.net:


Зм.

Арк.

№ докум.

Підп.

Дата

Арк.

КР.КІ-11.00.000 ПЗ

ЗМІСТ

ВСТУП 5

1 ПОСТАНОВКА ЗАВДАННЯ 7

2 КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 8

2.1 Засоби BIOS  та DOS для роботи з клавіатурою 8

2.2 Резидентний обробник переривань 9

3 ПРОГРАМНА РЕАЛІЗАЦІЯ ЗАВДАННЯ 13

3.1 Опис алгоритму програми 13

3.2 Словесний опис програми 14

3.3 Результат виконання програми 15

4 ВИСНОВКИ 16

ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 17

Додатки…………………………………………………………………………..18

 

 

Системне програмування (або програмування систем) - це вид програмування, який полягає у розробці програм, які взаємодіють з системним програмним забезпеченням (операційною системою), або апаратним забезпеченням комп'ютера. Головною відмінністю системного програмування в порівнянні з прикладним програмуванням є те, що прикладне програмне забезпечення призначене для кінцевих користувачів (напр., текстові процесори, графічні редактори), тоді як результатом системного програмування є програми, які обслуговують апаратне забезпечення або операційну систему (напр., дефрагментація диска) що обумовлює значну залежності такого типу ПЗ від апаратної частини. Слід зазначити, що "звичайні" прикладні програми можуть використовувати у своїй роботі фрагменти коду, характерні для системних програм, і навпаки; тому чіткої межі між прикладним та системним програмуванням немає.

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

В загальному для системного програмування характерні такі особливості (одна або кілька):

  1.  програміст повинен враховувати особливості операційної системи та/або апаратного забезпечення, на яких передбачається запуск програми, та використовувати ці особливості (наприклад, застосовуючи оптимізовані алгоритми для певної архітектури)
  2.  зазвичай використовуються низькорівневі мови програмування або діалекти які:
  3.  можуть працювати у ресурсо-обмеженому середовищі

  1.  максимально раціональні та мають мінімальні затримки за часом виконання
  2.  дозволяють виконувати прямий доступ до пам'яті та керуючої логіки
  3.  дозволяють програмісту писати частини програми на асемблері
  4.  налагодження може бути складним, якщо неможливо запустити програму у режимі налагодження через обмеження у ресурсах. Виконання програми у імітованому середовищі може зняти цю проблему.

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

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

Загалом можна поділити програми на два класи: додатки для DOS і для Windows. Вони суттєво відрізняються, по причині однозадачності MS DOS, та захищеному режимі роботи MS Windows, який не дозволяє тісно працювати з апаратною частиною.

Метою розробки даної курсової роботи є отримання практичних навичок програмування мовою асемблера.

Підсумком виконання курсової роботи є розробка алгоритму і програми на мові асемблера, яка реалізує даний алгоритм.

Мета курсової роботи з курсу ”Системне програмування” вироблення у студентів практичних навиків створення системних програм, які напряму працюють з процесором, пам’яттю і портами вводу/виводу. Назва курсової роботи: Створення резидентної програми.

Завдання:

Написати резидентну програму, яка при натисканні на [Ctrl]+[D] записує в буфер клавіатури команду “dir” та Enter

У відповідності із завданням студент повинен:

  1.  створити алгоритмічну модель роботи програми;
  2.  написати програму мовою Assembler;
  3.  протестувати програму, перевірити, чи її робота відповідає поставленому завданню;
  4.  зробити висновки на основі результатів .

2.1 Засоби BIOS  та DOS для роботи з клавіатурою

Набір функцій для роботи з клавіатурою через BOIS реалізовано за допомогою переривання int 16h. Кожній клавіші на клавіатурі відповідає так званий скан-код (див. додаток А), що відповідає тільки цій клавіші. Цей код посилається клавіатурою при кожному натисканні і відпусканні клавіші й обробляється BIOS (обробником переривання int 9). Переривання 16h дає можливість одержати код натискання, не перехоплюючи цей обробник. Основні функції переривання 16h подані в таблиці 4.2. Якщо натиснутій клавіші відповідає ASCII-символ, то в АН повертається код цього символу, а в AL — скан-код клавіші. Якщо натиснутій клавіші відповідає розширений ASCII-код, у AL повертається префікс скан-коду (наприклад, Е0 для сірих клавіш) чи 0, якщо префікса немає, а в АН — розширений ASCII-код. Функція 00Н обробляє тільки комбінації, що використовують клавіші 84-клавішної клавіатури, l0h обробляє всі 101 – 105-клавішні комбінації, 20h — 122-клавішні. Тип клавіатури можна визначити за допомогою функції 09h переривання 16h, якщо вона підтримується BIOS (чи підтримується ця функція, можна визначити за допомогою функції C0h переривання 15h).

Функція

Значення

00h, 10h, 20h

Читання символу з клавіатури з очікуванням.

01h, 11h, 21h

Перевірка буферу на наявність символу.

05h

Переміщення символу в буфер клавіатури.

02h, 12h, 22h

Читання стану клавіатури.

Робота з клавіатурою засобами DOS реалізовується через переривання int 21h. Практично всі функції DOS повторюють функції BIOS за виключенням додаткових операцій Ctrl + Break i Ctrl + C. Функції BIOS роботи з клавіатурою переривання 21h подані в таблиці нижче.

Функція

Значення

h

Ввід рядка символів в буфер.

01h

Буферизований ввід з ехо-виводом.

08h

Буферизований ввід без ехо-виводу.

07h

Не фільтрований ввід без ехо-виводу.

06h

Ввід/вивід на консоль.

h

Перевірка стану стандартного вводу.

h

Скидання буферу клавіатури (Reset).

2.2 Резидентний обробник переривань

Великий клас програм, що забезпечують функціонування обчислювальної системи (драйвери пристроїв, програми шифрації і захисту даних, русифікатори, обслуговуючі програми типу електронних блокнотів або калькуляторів та ін.), повинні постійно находиться в пам'яті і швидко реагувати на запити користувача або на якісь події, що відбуваються в обчислювальній системі. Такі програми носять назву резидентних програм, (Terminate and Stay Resident, TSR). Зробити резидентною можна як програму типу  СОМ, так і програму типу ЕХЕ, проте з огляду на те, що резидентна програма має бути максимально компактною, найчастіше в якості резидентних використовують програми типу СОМ.

Розглянемо типову структуру резидентної програми і системні засоби залишення її в пам'яті після ініціалізації:

mSeg            segment

               assume  SS:mSeg, DS:mSeg, CS:mSeg, ES:mSeg

org             100h

MAIN:           jmp     L1              ; Пропуск резидентної частини.

                                       ; Резидентна частина

old09h          dd      0               ; Стара адреса Int 09h.

L2:     

       pushf                           ; Регістр прапорців - в стек.

       call    CS:old09h               ; Виклик системного обробника          ;переривань 09h.        

       push    AX                      ; Збереження тих регістрів,

       push    BX                      ; вміст яких змінюється

       push    CX                      ; в програмі.

       push    DX                      ;

       push    ES                      ;

       

       =====================

 Резидентна частина

       =====================

                                       ; Реагуюча частина

       mov     AX, 03                  ; Очистка консолі.

       int     10h                     ;

       mov     AH, 09h                 ; Вивід строки:

       lea     DX, message             ; 'Out of memory. Less the  

                                          30mb left!'

       int     21h                     ;

L3:     

       pop     ES                      ; Відновлення вмісту 

       pop     DX                      ; регістрів ES, BX,

       pop     CX                      ; AX.

       pop     BX                      ;  

       pop     AX                      ;

       iret                            ; Повернення в DOS.

L1:     

                                       ; Ініціююча частина

       mov     AX, 3509h               ; Отримати в ES:BX стару адресу

       int     21h                     ; обробника переривань int 09h

       mov     word ptr CS:old09h, BX  ; і запам'ятати її

       mov     word ptr CS:old09h+2, ES; в комірці old09h.

       

       mov     AX, 2509h               ; Встановлення нової адреси  

                                         <адр.L2>

       lea     DX, L2                  ; обробника переривання int 09h.

       int     21h                     ;

       

       mov     AH, 09h                 ; Вивід строки:

       lea     DX, message             ; 'Program is resident'.

       int     21h                     ;

       

       mov     AX, 3100h               ; Завершити резидентну частину

       mov     DX, (L1-MAIN+10Fh)/16   ; розміром (L1-MAIN+10Fh)/16.

       int     21h                     ;

memMess         db     'Out of memory. Less the 30mb left!', '$'

message         db     'Program is resident', '$'

mSeg    ENDS                            ; Кінець програми.

       END     MAIN                    ; Зовсім кінець області MAIN.

До розміру резидентної частини (M1-Pr) додається розмір PSP (100h) і ще 15, щоб при розподілі на 16 округлити результат у більшу сторону. Це

буде розмір в параграфах.

Чому 'mov AX, CS: sym1', а не просто 'mov AX, sym1'? це викликано тим, що всі адреси в рег. ES, DS, SS належать тій програмі, з якої була викликана перериваюча програма. Тільки CS змінюється як при звичайному дальньому виклику. При поверненні CS відновлюється зі стека.

Резидентна частина закінчується командою IRET, так як викликається вона перериванням, а не командою CALL. Відрізняється IRET від RET тим, що зі стека читається крім CS: IP ще й вміст регістра ознак.

Точка входу у процедуру при запуску

main

jmp RESID  

…Резидентні поля даних                

Точка входу у процедуру при виклику

ENTRY

Код резидентної

частини                           

iret

Резидентна частина

RESID

Завершення програми і залишення резидентної частини в пам’яті

… секція ініціалізації

Функція DOS 31h

Рисунок 2.3 – Взаємодія елементів резидентної програми

Функція 31h, закріпивши за резидентною програмою необхідну для її функціонування пам'ять, передає управління командному процесору і обчислювальна система переходить в початковий стан. Наявність програми, резидентної в пам'яті, ніяк не відбивається на ході обчислювального процесу, за винятком того, що зменшується об'єм вільної пам'яті. Одночасно в пам'ять може бути завантажене будь-яка кількість резидентних програм.

Будь-яка резидентна програма має принаймні дві точки входу. При

запуску з клавіатури програми типу .СОМ управління завжди передається на

перший байт після PSP (IP=l00h). Тому практично завжди першою командою резидентної програми є команда jmp, яка передає управління на початок секції ініціалізації.

Після відробітку функції DOS 31h програма залишається в пам'яті в пасивному стані. Для того, щоб активізувати резидентну програму, їй потрібно якось передати управління і, можливо, параметри. Викликати до життя резидентну програму можна різними способами, але найбільш частим є механізм апаратних або програмних переривань.

В цьому випадку в секції ініціалізації необхідно заповнити відповідний

вектор адресою резидентної частини програми (точка ENTRY на Рисунку 2.3). Адреса ENTRY утворює другу точку входу в програму, через яку здійснюється її активізація. Очевидно, що резидентна секція програми повинна закінчуватися командою виходу з переривання iret.

При заповненні в секції ініціалізації векторів не виникає проблем з перенастроюванням регістра DS, оскільки в програмі типу СОМ усі регістри вказують на єдиний сегмент програми. У секції ініціалізації передбачений, як це зазвичай робиться, вивід на екран повідомлення про завантаження програми в пам'ять.

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

 

3.1 Опис алгоритму програми

Програма складається з резидентної частини (що залишається в оперативній пам’яті після завершення програми ) та реалізації отримання даних про диск.

Алгоритм програми наведений на рисунках 3.1

Перевірка чи введено Ctl+D

Ввід  з клавіатури

Залишити резидентною, вийти в DOS

             Початок

Завантаження резидента в память

             Кінець

Викликати  команду          DIR

Рисунок 3.1 – Схема завантажувальної частини

Перевірка чи введено Ctl+D

Ввід  з клавіатури

             Кінець

Викликати  команду          DIR

Програма написана у форматі СОМ, оскільки цей формат є менш громіздким ніж .exe, тому в ній передбачається тільки один сегмент, в якому зв'язуються сегментні регістри CS і DS. При запуску програми з клавіатури, командою jmp відразу ж здійснюється перехід на секцію ініціалізації резидента, яка оформлена у вигляді окремої процедури. Далі здійснюється

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

3.2 Словесний опис програми

 

Функція 0Сh спочатку очищає буфер клавіатури ( тобто "забуває" попередні натиснення клавіш ), а потім виконує будь-яку з функцій 01h, 06h, 07h, 08h або 0Аh. Номер цієї функції задається в регістрі AL. 

Функція 05h переривання int 21h, використовується  для переміщення символу в буфер клавіатури.

Запис символів в буфер клавіатури

На вході: АН = 05h

 СL = ASCII код

 СH = Scan Code або “0”

На виході: АL = „0” – якщо запис здійснено успішно

         „1” – якщо переповнений буфер клавіатури.

Перериваня int 16h, використано для створення очікування на введеня клавіші.

Int 21h, використано для отримання старої, а також встановлення нової  адреси переривання 09h.

mov     AX, 3509h                ; Отримати в ES:BX стару адресу

       int     21h                               ; обробника переривань int 09h

       mov     word ptr CS:old09h, BX    ; і запам'ятати її

       mov     word ptr CS:old09h+2, ES ; в комірці old09h.

       mov     AX, 2509h   ; Встановлення нової адреси <адр.L2>

       lea     DX, L2  ;обробника переривання int 09h

       int     21h                  ;

Int 21h ; використано для завершення резидентної частини.

       mov     AX, 3100h                          ; Завершити резидентну частину

       mov     DX, (L1-MAIN+10Fh)/16  ; розміром (L1-MAIN+10Fh)/16

       int     21h                                          

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

Результати виконання програми зображено на рисунку 3.3.

Рисунок 3.3 – Результат роботи програми


4 ВИСНОВКИ

Результатом виконання даного курсової проекту з системного програмування стала резидентна програма яка при натисненні комбінації [Ctrl]+[D] записує в буфер клавіатури команду “dir” та Enter.

Реалізована програма працює тільки в операційній системі MS-DOS, що зумовлено її архітектурою,  у Windows інша реалізація роботи з пам’яттю, і резидента програма повинна бути написана з урахуванням всієї специфіки даного сімейства ОС та поставлених вимог до стандартів мови.


ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ

  1.  Зубков С.В. Assembler для DOS, Windows и UNIX– 3-е изд., стер./ С.В.Зубков – М.: ДМК Пресс; СПб.: Питер, 2004. – 608с.
  2.  Джорден Р. Справочник программиста персональных компьютеров типа IBM PC, XT и AT: Пер. с англ./ Предисл. Н.В. Гайского. – М.: Финансы и статистика, 1992. – 544с.
  3.  Фролов А.В. MS-DOS для программиста/ А.В.Фролов, Г.В.Фролов  – М.: ДИАЛОГ-МИФИ, 1995. – 256с.
  4.  Молчанов С.В. Системное программное обеспечение. Учебник для вузов/ А.Ю. Молчанов. -  СПб: Питер, 2003. – 396 с.
  5.  Костельцев А.В. Построение интерпретаторов и компиляторов/ А.В.Костельцев  – СПб: Наука и техника, 2001. – 224 с.
  6.  Велихов А.В. Макроассемблер: Создание и отладка программ/ А.В.Велихов – М.: Майор, 2001. – 192 с.


          Додатки 

seg1    SEGMENT

       ASSUME  SS:Seg1,DS:Seg1,CS:Seg1,ES:Seg1

       ORG     100h              ;Початок програми з 0100h

Pr:     JMP     M1                ;Пропускаємо резидентну частину

;== Резидентна частина ==

old_09  dd      0                  ;Старий адрес Int 09h

M2:     pushF                      ;Регiстр прапорцiв - в стек

       call    CS:old_09          ;Виклик системного обр. перерив. 09h

       push    AX                 ;Зберiгаємо тi регiстри, вмiст

       push    BX                 ;яких мiняється в програмi

       push    ES                 ;

 push    CX

       mov     AX,40h             ;Занесення сегментного адресу

       mov     ES,AX              ;буферу клавiатури в рег.ES

       mov     BX,ES:[1Ah]        ;Адрес голови буферу клавiатури

       mov     AX,ES:[BX]         ;Читання коду натиснутої клавiшi

       cmp     AX,2004h           ;Порiвняння з Ctrl+D

       jnz     M3                 ;Вихiд, якщо не Ctrl+D

 mov  ah,05h

 mov  ch,1Ch

 mov   cl,0Dh   ;ENTER (перший ентер потрiбен для того, щоб команда dir вводилася

 int  16h   ;з нового рядка (в попередньому вже можуть бути символи)

       mov  ah,05h

 mov  ch,20h   ;"d"

 mov  cl,64h

 int  16h

 mov  ah,05h

 mov  ch,17h

 mov  cl,69h   ;"i"

 int  16h

 mov  ah,05h

 mov  ch,13h

 mov  cl,72h   ;"r"

 int  16h

 mov  ah,05h

 mov  ch,1Ch

 mov   cl,0Dh   ;ENTER

 int  16h

M3:     pop     ES                 ;Вiдновимо вмiст

       pop     BX                 ;регiстрiв ES, BX и AX

       pop     AX                 ;

 pop     CX

       iret                       ;Вихiд в DOS

M1:     ;----------------------    ;iнiцiююча частина

       mov     AX,3509h           ;Отримати й передати в ES:BX стару адресу

       INT     21h                ;обробника переривання int 09h

       mov     word ptr old_09,BX       ;i запам'ятати його

       mov     word ptr old_09+2,ES     ;в ячейцi old_09

       mov     AX,2509h           ;Встановлення нової адреси <адр.M2>

       lea     DX,M2              ;обробника переривання int 09h

       INT     21h                ; -------

       mov     AH,09h             ;Вивiд строки:

       lea     DX,x               ;"Резидентний обробник завантажений в пам'ять"

       INT     21h                ; -------

       mov     AX,3100h           ;Завершити i залишити резидентною

       mov     DX,(M1-Pr+10Fh)/16 ;частину размiром (M1-Pr+10Fh)/16

       INT     21h                ; -------

x       db     "Резидентний обробник завантажений в пам'ять", '$'

Seg1    ENDS                       ;Кiнець сегменту




1. а в ВестИндии Гваделупа Мартиника и др
2.  З лікувальною та профілактичною метою використовують головним чином антитоксичні сироватки та імуноглобу
3. а среднюю классические гимназии реальные училища и высшую университеты институты
4. реферату Нормативні документи регламентуючі питання оплати праціРозділ Економіка підприємства Норматив
5. Реферат- Личностный фактор в системе теоретической педагогики
6. Налоговая система нэпа
7. Национальная Ассоциация Пауэрлифтинга Президент Федерации армспорта пауэрлифтинга и гирево
8.  Социальноэкономическая сущность и роль бюджета государства В любой стране государственный бюджет веду
9. Виды и жанры литературы средневековья
10. Вариант 1 Найти длины кратчайших путей путей минимальной длины и сами пути от фиксированной вершины s до все
11. і. Базальна температура на протязі 3х менструальних циклів однофазна
12. Возвращенная свобода Глава из книги История Народа Хунну
13. . Персональные компьютеры обычно проектируются на основе принципа открытой архитектуры.
14. это осуществление этими организациями комплекса мероприятий направленных на обеспечение их в период мобил
15. Булагатском ~ в 1217 раз
16. Юридическое лицо как субъект гражданского права
17. Drwinists 2 The Progressive Drwinists 3 The Collectivists 4 The Complexity Theorists 5 The Directionlists 6 The Trnshumnists 7 The Intelligent Designers 8 The Theistic Evolutionis
18. информация Если изначально под информацией понимались сведения передаваемые людьми устным письменным ил
19. Fondul Evreiesc l Moldovei ~nregistrt~ l 10 februrie 2011
20. Сжатие данных при передаче изображений