Копіювання буфера екрану в файл

Розробка програми "Копіювання буфера екрану в файл" з допомогою мови Асемблер. Резидентний обробник переривань. Захист резидентної програми від повторної установки. Вивантаження резидентної програми з пам'яті. Методика і алгоритм вирішення завдання.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 31.01.2015
Размер файла 160,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

ТЕРНОПІЛЬСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ

ФАКУЛЬТЕТ КОМП'ЮТЕРНИХ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ

Кафедра спеціалізованих комп'ютерних систем

Курсова робота

з дисципліни “Системне програмування”

на тему:

“Копіювання буфера екрану в файл”

Виконав: ст. гр. КСМз-31 Чучак Т.С.

Перевірив: Сегін А.І.

Тернопіль 2013

Зміст

Вступ

1. Короткі теоретичні відомості

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

1.2 Захист резидентної програми від повторної установки

1.3 Вивантаження резидентної програми з пам`яті

1.4 Перехоплення переривань

1.5 Обробка переривань

1.6 Переривання від зовнішніх пристроїв

2. Опис методики та алгоритму вирішення завдання

3. Практична реалізація

Висновок

Список використаних джерел
Додаток А
Додаток Б
Додаток В

Вступ

Асемблер - є мовою програмування низького рівня. Чим нижчий рівень мови програмування, тим ближча специфіка роботи програми до самого процесора, для якого вона й була написана. Вважається, що мови низького рівня складніші й потребують більш вузької спеціалізації програміста, оскільки програма написана на асемблері для одного типу процесорів виявиться не завжди придатною для роботи з іншими процесорами. З іншого боку програми написані на асемблері компактні та швидкі, що теж є немало важливим. Програмування на мові асемблера вважається складною задачею, причини цього такі:

1. Мова асемблера будь-якого процесора суттєво складніша будь-якої мови високого рівня. Щоб скористатись всіма можливостями мови асемблера, треба по крайній мірі знати команди мікропроцесора, а їх число з усіма можливими варіантами переважає 100, їх кількість значно перевищує кількість операторів і ключових слів інших мов високого рівня. Проблема ускладнюється ще тим, що зміни в асемблері виникають набагато швидше ніж в мовах високого рівня, це зв'язано з появою нових мікропроцесорів і відповідно нових команд.

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

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

Отож, метою виконання даної курсової роботи є отримання практичних навичок програмування мовою асемблер під час виконання індивідуального завдання. Підсумком виконання курсової роботи буде розроблена програма «Копіювання буферу екрану в файл».

буфер екран асемблер програма

1. Короткі теоретичні відомості

В даній курсовій роботі описується програма копіювання буферу екрану в файл. Ця задача реалізовується у вигляді резидентної програми. Резидентні програми ще називають TSR-програмами (Terminate State Resident, тобто "завершити і залишити резидентним”).

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

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

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

text segment 'code'

assume CS:text,DS:text

org 100h main proc

jmp init ;Перехід на секцію ініціалізації

; Дані резидентної секції програми

...

entry: ; Текст резидентної секції програми

...

main endp

init proc ;Секція ініціалізації

...

mov DX (init-main+10Fh)/16;Pозмір в параграфах

mov АН,3100h ;функція "Завершити і залишити в

int 21h ; пам'яті" init endp text ends

end main

Рисунок 1.1. Типова структура резидентної програми.

Програма пишеться у форматі СОМ, тому в ній передбачається тільки один сегмент, в якому зв'язуються сегментні регістри CS і DS; на початку сегменту резервується l00h байт дня PSP [1].

При запуску програми з клавіатури управління передається (відповідно до параметра директиви end) на початок процедури main. Командою jmp зразу ж здійснюється перехід на секцію ініціалізації, яка може бути оформленою у вигляді окремої процедури або входити до складу процедури main. В секції ініціалізації, зокрема, готуються умови для роботи програми вже в резидентному стані. Останніми рядками секції ініціалізації викликається функція DOS 31h, яка виконує завершення програми із залишенням в пам'яті вказаної її частини. Ця функція не може залишати резидентною програми розміром більше 64 Кб, але багато програм, написаних на асемблері, відповідають цій умові. Оскільки резидентні програми зменшують об'єм основної пам'яті, їх завжди пишуть на асемблері і оптимізують для досягнення мінімального розміру.

Розмір резидентної частини програми (в параграфах) передається DOS в регістрі DX. Визначити розмір резидентної секції можна, наприклад, таким чином. До різниці зсувів mil-main, яка рівна довжині резидентної частини програми в байтах, додається розмір PSP (l00h) і ще число 15 (Fh) для того, щоб після цілочисельного розподілу на 16 результат був закруглений у більшу сторону.

З метою економії пам'яті секція ініціалізації розташовується в кінціпрограми і відкидається при її завершенні.

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

На мал. 1.2 показані елементи резидентної програми і їх взаємодія.

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

Після відробітку функції DOS 31h програма залишається в пам'яті в пасивному стані. Для того, щоб активізувати резидентну програму, їй треба якось передати управління і, можливо, параметри. Викликати до життя резидентну програму можна різними способами, але самим споживаним є механізм апаратних або програмних переривань. В цьому випадку в секції ініціалізації необхідно заповнити відповідний вектор адресою резидентної частини програми (точка entry на рисунку. 2.2). Адреса entry утворює другу точку входу в програму, через яку здійснюється її активізація. Очевидно, що резидентна секція програми повинна закінчуватися командою виходу з переривання iret [2].

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

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

1.2 Захист резидентної програми від повторної установки

Як правило, в секції ініціалізації завантажуються вектори переривань, через які активізуватиметься програма. Останніми рядками секції ініціалізації викликається функція DOS 31h, яка виконує завершення програми із залишенням в пам'яті її резидентної частини [3].

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

Найпоширенішим методом захисту резидентної програми від повторної установки є використовування переривання 2Fh, спеціально призначеного для зв'язку з резидентними програмами. При виклику цього переривання в регістрі АН задається номер функції (від 00h до FFh), а в регістрі AL - номер підфункції (в тому ж діапазоні). 00h - 7Fh зарезервовано для DOS/Windows 0B8h - 0BFh зарезервовано для мережних функцій 0C0h - 0FFh відводиться для програм [4].

Для того, щоб резидентна програма могла озватися на виклик переривання int 2Fh, в ній повинен бути обробник цього переривання. Фактично всі резидентні програми, як системні, так і прикладні, мають такі обробники, через яких здійснюється не тільки перевірка на повторну установку, але і взагалі зв'язок з резидентною програмою: зміна режиму її роботи або отримання від неї в транзитну програму якихось параметрів. Завдання дії, яка належить виконати обробнику переривання 2Fh конкретної резидентної програми, здійснюється за допомогою номера підфункції, що поміщається перед викликом переривання в регістр AL.

Таким чином, обробник переривання 2Fh резидентної програми повинен, перш за все, перевірити номер функції в регістрі АН; при виявленні "своєї функції" обробник аналізує вміст регістра AL і виконує дії, що зажадалися, після чого командою iret передасть управління програмі що його викликала. Якщо, проте, обробник знайшов в регістрі АН "чужу функцію", він повинен командою jmp CS:old_2fh передати управління по ланцюжку тому обробнику, адреса якого була раніше у векторі 2Fh. В результаті виклик int 2Fh з будь-якої програми проходитиме по ланцюжку через все завантажені резидентні програми, поки не досягне "своєї програми" або не поверне управління в ту, що викликала програму через обробник DOS (який, очевидно, завжди буде самим останнім в ланцюжку) [4].

Природно, для комунікації з резидентною програмою повинен бути встановлений деякий інтерфейс. Звичайно при перевірці на повторну установку резидентна програма, якщо вона вже знаходиться в пам'яті, повертає в регістрі AL значення FFh, яке є ознакою заборони вторинного завантаження. Іноді для більшої надійності ідентифікації "своєї функції" резидентна програма, крім значення FFh в регістрі AL, повертає ще якісь обумовлені наперед коди в інших регістрах. Часто через додаткові регістри передасться символьна інформація, наприклад, ім'я програми. В цьому випадку, якщо програма, що викликала, з ім'ям DUMP.COM (тобто друга копія резидентної програми, що з'ясовує, чи можна їй залишитися резидентною в пам'яті) набуває після виклику int 2Fh в регістрі AL значення FFh, а в регістрах СХ і DX символьні коди 'DU' і 'МР', вона може бути упевненою, що її перша копія вже знаходиться в пам'яті. Якщо ж в регістрі AL повернувся код FFh, а в регістрах СХ і DX -коди, наприклад, 'ОК' і 'RB', це, швидше за все означає, що закріплена за нашою програмою функція мультиплексного переривання і використовується іншою резидентною програмою. В цьому випадку варто змінити функцію, щоб не порушувати конфліктних ситуацій.

В резидентну частину слід включити обробник переривання 2Fh. Його розташування в межах тексту програми не має особливого значення; ми помістили його на початку резидентної частини. Секція ініціалізації зазнала великі зміни. Вона повинна починатися з виклику переривання 2Fh з відповідною функцій для перевірки на повторну установку. Якщо перша копія програми вже завантажена, поточну програму слід завершити не функцією 3th (завершити і залишити в пам'яті), а звичайною функцією завершення 4Ch. Якщо ж нашої програми в пам'яті немає, то в секції ініціалізації, крім заповнення її "робочого вектора", в даному випадку 03h, слід також встановити наш обробник мультиплексного переривання.

Серед функцій мультиплексного переривання, призначених для прикладних програм, ми довільно вибрали для нашої програми функцію F1h, а для перевірки на повторну установку підфункцію 00h. Резидентний обробник переривання 2Fh, включений в нашу програму, перевіряє номери функції і підфункції і при виявленні яких-небудь інших кодів передає управління наступному обробнику цього переривання. Якщо ж викликана функція F1h з підфункцією 00h, обробник встановлює в регістрі AL значення FFh ("я вже завантажений") і повертає управління в ту, що викликала програму командою iret.

Секція ініціалізації починається з перевірки на повторну установку. Після завантаження в регістр ан номери функції (F1h), а в регістр AL - номери підфункції (00h), викликається переривання 2Fh. Після повернення з переривання аналізується вміст регістра AL Якщо обробник повернув значення FFh, програма повинна завершитися без залишення в пам'яті. Ці дії виконуються по мітці installed. Якщо повернено інше значення, ініціалізація продовжується (для надійності було варто перевірити, чи повернений саме 0). Зберігається старий вміст вектора 2Fh, встановлюється наш обробник цього переривання, після чого виконуються всі дії по установці, передбачені в старому варіанті програми динамічного дампу. При переході на мітку installed на екран виводиться повідомлення про неможливість повторної установки і виконується функція завершення 4Сh з кодом повернення 01h. Останнє, звичайно, має символічний характер, оскільки цей код надалі не аналізується.

1.3 Вивантаження резидентної програми з пам'яті

Слід помітити, що в DOS відсутні засоби вивантаження резидентних програм. Єдиний передбачений для цього механізм - перезавантаження комп'ютера. Практично, проте, більшість резидентних програмних продуктів мають вбудовані засоби вивантаження. Звичайно вивантаження резидентної програми здійснюється відповідною командою, що подається з клавіатури і сприйманою резидентною програмою. Для цього резидентна програма повинна перехоплювати переривання, що поступають з клавіатури, і "виловлювати" команди вивантаження. Інший, боже простий спосіб полягає в запуску деякої програми, яка за допомогою, наприклад, мультиплексного переривання 2Fh передає резидентній програмі команду вивантаження. Частіше за все як "вивантажуюча" використовують саму резидентну програму, точніше, її другу копію, яка, якщо її запустити в певному режимі, не тільки не намагається залишитися в пам'яті, але, навпаки, вивантажує з пам'яті свою першу копію.

Вивантаження резидентної програми з пам'яті можна здійснити різними способами. Найбільш простій - звільнити блоки пам'яті, займані програмою (власне програмою і її оточенням) за допомогою функції DOS 49h. Інший, складніший - використовувати у вивантажуючій програмі функцію завершення 4Ch, примусивши її завершити не саму вивантажуючу, а резидентну програму, та ще після цього повернути управління у вивантажуючу. У будь-якому випадку перед звільненням пам'яті необхідно відновити всі вектори переривань, перехоплені резидентною програмою. Слід підкреслити, що відновлення векторів представляє в загальному випадку значну і іноді навіть нерозв'язну проблему. По-перше, старий вміст вектора, який зберігається десь в полях даних резидентної програми, неможливо витягнути "зовні", з іншої програми, оскільки немає ніяких способів визначити, де саме його заховала резидентна програма в процесі ініціалізації. Тому вивантаження резидентної програми легше здійснити з неї самої, ніж з іншої програми. По-друге, навіть якщо вивантаження здійснює сама резидентна програма, вона може правильно відновити старий вміст вектора лише в тому випадку, якщо цей вектор не був пізніше перехоплений іншою резидентною програмою. Якщо ж це відбулося, в таблиці векторів знаходиться вже адреса не вивантажуваної, а наступної резидентної програми, і якщо відновити старий вміст вектора, ця наступна програма "повисне", позбавившись засобів свого запуску. Тому надійно можна вивантажити тільки останню із завантажених резидентних програм. [5]

В нашій програмі підфункція 00h переривання 2Fh служить для перевірки на повторну установку, а підфункція 01h - для вивантаження. В секцію ініціалізації додані рядки збереження старого вмісту вектора 09h. Це виконується точно так, як і для вектора 2Fh - за допомогою функції DOS 35h. Старий вектор зберігається в осередку old_09h, розміщуваному в резидентній частині програми. Оскільки вивантаження програми виконується за допомогою переривання 2Fh, текст обробника цього переривання ускладнюється.

Резидентний обробник переривання 2Fh перш за все перевіряє номер функції, що поступив в регістрі АН, Якщо цей номер відрізняється від F1h, управління передається наступному обробнику по ланцюжку. Далі аналізується вміст регістра AL. Якщо AL=00h, виконуються дії по захисту від повторного завантаження. Якщо AL=01h, здійснюється перехід на мітку uninstall для виконання дій по вивантаженню програми. При будь-якому іншому номері підфункції управління передається наступному обробнику по ланцюжку.

По мітці uninstall здійснюється збереження що використовуються далі регістрів (що робиться швидше для краси, ніж з потреби) і функцією DOS 25h відновлюється з осередків old_09h і old_2Fh початковий вміст відповідних векторів. Далі з осередку із зсувом 2Ch щодо початку PSP в регістр ES завантажується адреса оточення програми. Сегментна адреса блоку пам'яті, що звільняється, - єдиний параметр, що вимагається для виконання функції DOS 49h. Розмір блоку DOS, що звільняється, відомий, він зберігається в блоці управління пам'яттю (МСВ). Далі звільняється блок пам'яті з самою програмою. Сегментна адреса цього блоку (адреса PSP) знаходиться в регістрі CS. Нарешті, командою iret управління передасться в програму, що викликала переривання 2Fh.

Функція 49h оповіщає DOS про те, що даний блок пам'яті вільний і може надалі використовуватися DOS. Це, проте, не заважає виконуватися завершальним рядкам програми (в даному випадку - команді iret), оскільки звільнення пам'яті не руйнує її вмісту. Наша резидентна програма фізично стиратиметься лише після того, як в пам'ять буде завантажена чергова виконувана програма [5].

Якщо програма запускається з клавіатури з вказівкою яких-небудь параметрів (імен файлів, ключів, що визначають режим роботи програми і т.ін..), то DOS, завантаживши програму в пам'ять, поміщає всі символи, введені після імені програми (так званий хвіст команди) в префікс програмного сегменту програми, починаючи з відносною адресою 80h. Хвіст команди поміщається в PSP в цілком певному форматі. В байт за адресою 80h DOS заносять число символів в хвості команди (включаючи пропуск, що розділяє на командному рядку саму команду і її хвіст). Далі (починаючи з байтом за адресою 81h) слідують всі символи, введені з клавіатури до натиснення клавіші <Enter>. Завершується хвіст колом повернення каретки (13).

До даних секції ініціалізації додався рядок з очікуваним хвостом команди і байтовий прапор запиту на вивантаження.

Оскільки дії програми при її запуску залежать від того, чи введена команда запуску з параметром чи ні, наявність хвоста в PSP аналізується в самому початку секції ініціалізації. При запуску програми типу СОМ всі сегментні регістри указують на початок PSP. Байт з довжиною хвоста (можливо, нульовий) поміщається в регістр CL і порівнюється з нулем. Якщо в ньому 0, команда запуску була введена без параметрів і ініціалізація програми продовжується звичайним способом. Якщо хвіст має ненульову довжину, починається його аналіз.

Обнуленням регістра СН довжина хвоста "розширяється" на весь регістр СХ, що потрібне для організації циклу. Регістр DI настроюється на перший байт хвоста, а регістр SI - на початок поля tail з очікуваною формою параметра. Регістр AL готується для виконання команди сканування рядка. Команда scasb порівнює в циклі байти хвоста з вмістом AL (кодом пропуску). Порівняння ведеться до тих пір, поки не буде знайдений перший символ, відмінний від пропуску. Ця операція необхідна через те, що оператор при введенні команди вивантаження може відділити параметр команди від самої команди будь-яким числом пропусків, які потраплять в хвіст команди в PSP і перешкодять аналізувати введений параметр [5].

Вихід з циклу виконання команди scasb здійснюється, коли команда проаналізувала перший після пропуску символ. Після цього регістр DI указує на другий символ параметра. Команда dec DI коректує покажчик DI, направляючи його на перший значущий символ введеного параметра. Далі командою порівняння рядків cmpsb здійснюється порівняння трьох символів хвоста, що залишилися. Якщо символи співпадають з параметром 'off', записаним в програмі, встановлюється прапор запиту на вивантаження. Якщо результат порівняння виявився негативним, прапор запиту не встановлюється (і, отже, неправильний параметр просто не сприймається). В будь-кому випадку здійснюється перехід на продовження програми, що починає перевіряти, чи не встановлена вже ця програма в пам'яті. Якщо програма ще не встановлена, введений параметр не має сенсу. Ініціалізація здійснюється звичайним способом: зберігаються і встановлюються вектори і програма завершується із залишенням в пам'яті.

За наявності в пам'яті резидентної копії цієї програми здійснюється перехід на мітку installed, де перш за все перевіряється, чи встановлений прапор запиту на вивантаження. Якщо прапор скинений, виводиться повідомлення про неможливість повторного завантаження і програма завершується з кодом повернення 1. Якщо прапор запиту встановлений, виконується вивантаження програми, яка полягає у виклику мультиплексного переривання 2Fh з функцією F1h і підфункцією 01h. Резидентний обробник цього переривання, включений до складу нашої резидентної програми, відпрацює цю підфункцію, відновить вектори і звільнить зайняті програмою блоки пам'яті. Після повернення управління з обробника в поточну програму буде виведено повідомлення про успішне вивантаження і програму буде завершений функцією 4Ch з нульовим кодом повернення.

Складена нами програма не позбавлена від недоліків. Так, в ній аналізуються завжди тільки 3 значущі символи хвоста. Таким чином, програма буде вивантажена і при введенні команди (ім'я).com onset. Інший недолік полягає в тому, що результат порівняння записаного в програмі хвоста з введеним з клавіатури параметром буде позитивним, тільки якщо з клавіатури введені рядкові букви. Команда (ім'я) OFF не приведе до вивантаження програми. По-справжньому було слід включити в програму перед аналізом хвоста перетворення символів параметра в прописні букви.

1.4 Перехоплення переривань

В архітектурі процесорів 80х86 передбачені особливі випадки, коли процесор припиняє (перериває) виконання поточної програми і негайно передає управління програмі-обробнику, спеціально написаної для обробки подібної ситуації. Такі особливі ситуації діляться на два типи: переривання і виключення, залежно від того, чи викликав цю ситуацію який-небудь зовнішній пристрій або виконувана процесором команда. Виключення діляться далі на три типи: помилки, пастки і останови, залежно від того, коли по відношенню що до викликаної їх команди вони відбуваються. Помилки з'являються перед виконанням команди, тому обробник такого виключення отримає як адреса повернення адресу помилкової команди (починаючи з процесорами 80286). Пастки відбуваються відразу після виконання команди, так що обробник одержує як адреса повернення адресу наступної команди. І нарешті, останови можуть виникати у будь-який момент і взагалі не передбачати засобів повернення управління в програму [6].

Команда INT (а також INTO і INT3) використовується в програмах якраз для того, щоб викликати обробники переривань (або виключень). Фактично вони є виключеннями пастки, оскільки адреса повернення, яка передасться обробнику, указує на наступну команду, але оскільки ці команди були введені до розділення особливих ситуацій на переривання і виключення, їх практично завжди називають командами виклику переривань. З огляду на те, що обробники переривань і виключень в DOS звичайно не розрізняють механізм виклику, за допомогою команди INT можна передавати управління, як на обробники переривань, так і виключень. Як показано на чолі 4, програмні переривання, тобто передача управління за допомогою команди INT, є основним засобом виклику процедур DOS і BIOS, тому що на відміну від виклику через команду CALL тут не потрібно знати адреси процедури, що викликається, - достатньо тільки номери. З іншого боку інтерфейсу розглянемо, як будується обробник програмного переривання.

1.5 Обробники переривань

Коли в реальному режимі виконується команда INT, управління передається за адресою, яка прочитується із спеціального масиву, таблиці векторів переривань, що починається в пам'яті за адресою 0000h:0000h. Кожний елемент такого масиву є дальньою адресою обробника переривання у форматі сегмент:зміщення або 4 нульові байти, якщо обробник не встановлений [7]. Команда INT поміщає в стек регістр прапорів і дальню адресу повернення, тому, щоб завершити обробник, треба виконати команди роpf і retf або одну команду iret, яка в реальному режимі повністю їм аналогічна.

Після того, як обробник написаний, наступний крок - прив'язка його до вибраного номера переривання. Це можна зробити, прямо записавши його адресу в таблицю векторів переривань.

Хоча пряма зміна таблиці векторів переривань і здається достатньо зручним, все-таки це не кращий підхід до установки обробника переривання, і користуватися ним слідує тільки у виняткових випадках, наприклад, усередині обробників переривань. Для звичайних програм DOS надає дві системні функції: 25h і 35h - встановити і прочитати адресу обробника переривання, які і рекомендуються до використовування в звичайних умовах.

Звичайно обробники переривань застосовують з метою обробки переривання від зовнішніх пристроїв або з метою обслуговування запитів інших програм.

1.6 Переривання від зовнішніх пристроїв

Переривання від зовнішніх пристроїв або апаратні переривання, - це те, що розуміється під терміном «переривання». Зовнішні пристрої (клавіатура, дисковод, таймер, звукова карта і т. д.) подають сигнал, по якому процесор перериває виконання програми і передає управління на обробник переривання. Всього на персональних комп'ютерах використовується 15 апаратних переривань, хоча теоретично можливості архітектури дозволяють довести їх число до 64.

IRQ1 (INT 9) - переривання клавіатури, викликається при кожному натисненні і відпуску клавіші на клавіатурі. Стандартний обробник цього переривання виконує досить багато функцій, починаючи з перезавантаженням по Ctrl-Alt-Del і закінчуючи приміщенням коду клавіші в буфер клавіатури BIOS [8].

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

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

Зрозуміло, обробка переривань не повинна займати багато часу: якщо переривання відбувається достатньо часто (наприклад, переривання послідовного порту може відбуватися 28 800 разів в секунду), його обробник обов'язково повинен виконуватися за більш короткий час. Якщо, наприклад, обробник переривання таймера виконуватиметься 1/32,4 секунди, тобто половину часу між перериваннями, вся система стане працювати в два рази повільніше. А якщо ще одна програма з таким же довгим обробником перехопить це переривання, система зупиниться зовсім. Саме тому обробники переривань прийнято писати виключно на асемблері.

2. Опис методики та алгоритму вирішення завдання

Виходячи з побажань та пропозицій щодо виконання курсового проекту з програмування дана задача копіювання буферу екрану в текстовий файл -ECRAN.TXT, була створена на основі мови асемблера, що забезпечило компактність та практичність.

Програма заносить копію екрану в файл в поточній директорії. При повторному запуску програма видаляє свою резидентну копію з пам'яті.

Розглянемо основні особливості алгоритму:

Знаходження резидентної копії в пам'яті реалізується тестуванням зайнятих блоків пам'яті. Блок PSP починається зразу після заголовка блоку. Звичайно блок може бути зайнятий і оточенням, але огляд лишніх блоків не мішає програмі виконувати свої функції. Пошук виконується через функцію 52h переривання 21h.

Перед тим як залишитись резидентною, програма звільняє блок пам'яті зайнятий оточенням.

При відновлюванні векторів їх старі значення знаходяться по зміщенню від початку PSP.

Використовуються процедури обробки переривань. Зокрема, процедури 25h і 26h. Вони залишають в стеку лишнє слово. Тому, воно викидається командою pop si.

В програмі практично не використовується стек процесу, з якого активізується програма. Програма встановлює свій стек на кінець PSP (старші адреса).

Копіювання екрану проводиться в два прийоми. Спочатку робиться миттєвий знімок в буфер, що знаходиться всередині програми. Скид з буфера в файл проходить в безпечний момент або з переривання по часу, або 28-го переривання.

Отже, загально програма працює за таким принципом. Починається з мітки BEGIN:, яка загружає початковий інтерфейс програми, пояснення та вказівки. Далі за вказаною міткою міститься наступна BEG:, після цієї мітки починається основна частина програми.

Особливістю даної програми є те, що вона резидентна, вона сканує пам'ять на наявність своєї копії. Якщо копія знайдена, то далі відновлюються вектори, а потім звільняється пам'ять.

Далі встановлюється програма в пам'ять. Зберігаються старі вектори і встановлюються нові. Після цього звільняється оточення і програма резидентно залишається в пам'яті.

Програма активізується після натискання комбінації клавіш Ctrl+Alt-Home. Далі вона миттєво копіює екран в буфер, а вже потім скидає вміст буфера в файл ECRAN.TXT.

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

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

Щодо структурованого алгоритму, то в додатку Б міститься детальна блок-схема даної програми. Ця блок-схема складається з частин, які можна інтерпретувати як певні блоки: це процедури, оператори, модулі.

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

3. Практична реалізація задачі

Програма була реалізована у вигляді COM - програми, в ній тільки один сегмент коду, стек в COM - програмах встановлюється автоматично по замовчуванню.

Так, як в COM - програмі немає сегменту даних, то дані в програмі були ініціалізовані на початку сегменту коду, за допомогою команди безумовного переходу.

Далі в сегменті коду розміщена область резидентних процедур. Першою є резидентна процедура переривання клавіатури INT09, в ній контролюється чи часом на нажаті клавіші Ctrl-Alt-Home, і якщо нажаті, то робиться запит на виконання операції. Далі є процедура переривання таймера INT08, в ній встановлюється свій стек, направлений на PSP. Потім провіряється чи не був запит, якщо був провіряється чи готовий буфер, і якщо готовий, то копіюється екран в буфер. Встановлюється старий стек і робиться вихід з переривання.

Після цього ідуть послідовно процедури обробки переривань: обробка 21-го переривання - INT21 (функції DOS)б 13-го - INT13(дискові операції), 25-го - INT25 і 26-го - процедура INT26 (процедури DOS прямого запису-читання диску).

Далі розміщена процедура INT28 - контроль над не документованим 28-им перериванням, яке використовується для виклику резидент них процедур. Якщо був запит і буфер готовий, то викликається процедура запису даних з буфера на диск.

Далі розміщена процедура 23-го переривання INT23, яка реалізовує вихід по Ctrl Break. Також тут розміщена процедура обробки критичних помилок - INT24.

Наступною є процедура, що копіює екран у буфер - COPY_TO_BUF. За нею розміщена процедура скиду вмісту буферу у файл - COPY_TO_DISK. Вона встановлює обробник критичних команд, відкриває файл, записує в файл вміст екрану і закриває файл.

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

Висновок

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

В результаті проведеної роботи при розробці, описі й оцінці різних способів реалізації даної програми, був вибраний оптимальний варіант. Розроблення даної задачі було спрямовано на формування професійних навичок у мене, як майбутнього спеціаліста.

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

Список використаної літератури

1. Рудаков П.И.,Финогенов К.Г. язык ассемблера - уроки програмирования 2001р.

2. Пирогов В.Ю. Assembler. Учебний курс. 2001р. 845 с.

3. Юров В. Assembler. Учебник. 2001р. 624 с.

4. Использувание Turbo Assembler при разроботки программ. К. ”Диаалектика” 1994. 288 с.

5. Агафонов В.Н. Автоматизація програм: понятійні засоби та їх організація. Доповн.-посібник: Наука 1990р. 224 с.

6. Язик ассемблера для IBM PC програмирования. М., 1992р.

7. Нортон П. Персональний комп'ютер фирмы IBM и операционная система MS DOS. М., 1992р.

8. М.Гук. Процессоры INTEL от 8086 до Pentium. Санкт- Петербург, 1998р.

9. Финогенов К.Г. Самоучитель по системних функциях BIOS

10. П. Абель Язык Ассемблера для IBM PC и программирование /Пер. с англ. Ю.В. Сальников. М.: Высш. шк., 1992. 447 с.: ил.

11. Л. Скэнлон Персональные ЭВМ IBM PC и ХТ. Программирование на языке Ассемблера. М.: Радио и связь. 1989.

Додаток А

БЛОК-СХЕМА ПРОГРАМИ

Додаток Б

ТЕКСТ ПРОГРАМИ

Cod segment

Assume cs:cod

Org 100h

begin:

jmp beg

line0 db 10,13, 'programa vstanovlena v pamiat.', 13, 10, '$'

line1 db 'programa kopiyvannia ekranu v fail',10,13,'$'

line2 db 'rozroblena Nesterenkom Olexiyom',10,13,'$'

line3 db 'Design 12.2011',10,13,'$'

ident dw 0f034h ;Зміщення103h від початку PSP

;старі вектори переривань

;зміщення від початку PSP

per09_1 dw ? ;+105h

per09_2 dw ? ;+107h

per08_1 dw ? ;+109h

per08_2 dw ? ;+10Bh

per21_1 dw ? ;+10Dh

per21_2 dw ? ;+10Fh

per13_1 dw ? ;+111h

per13_2 dw ? ;+113h

per25_1 dw ? ;+115h

per25_2 dw ? ;+117h

per26_1 dw ? ;+119h

per26_2 dw ? ;+11Bh

per28_1 dw ? ;+11Dh

per28_2 dw ? ;+11Fh

per24_1 dw ?

per24_2 dw ?

per23_1 dw ?

per23_2 dw ?

Id1 db 0 ;запит був

Id2 db 0 ;буфер готовий

Id3 db 0 ;признак обробки

;признаки роботи переривань

Id21 db 0 ;переривання 21h

Id13 db 0 ;переривання 13h

Id25 db 0 ; переривання 25h

Id26 db 0 ; переривання 26h

; буфер для зберігання копії екрану

bufer db 2050 dup(?)

;для тимчасового зберігання регістрів

_ax dw ?

_es dw ?

_ss dw ?

_sp dw ?

;ім'я файла для запису копії екрану

Name_file db 'ecran.txt',0

;область резидентних процедур переривання клавіатури

proc09 proc FAR

cmp CS:Id1, 1;запит був

jz JES

mov CS:_ax, ax

mov CS:_es, es

in al, 60h

cmp al, 47h

jz HOME

mov ax, CS:_ax

jmp short JES

HOME:

mov ax, 0

mov es, ax

mov al, es:[0417h]

and al, 0ch

cmp al, 0ch

jnz NO_CTRL_HOME

mov CS:Id1, 1;зробимо запит на виконання операції

NO_CTRL_HOME:

mov ax, CS:_ax

mov es, CS:_es

JES:

jmp dword ptr CS:[per09_1]

proc09 endp

;переривання таймера

proc08 proc FAR

;виконуємо стандартну операцію

pushf

call dword ptr CS:[per08_1]

cmp CS:Id3, 1

jnz NO_WORK

jmp WORK

NO_WORK:

mov CS:Id3, 1

;встановлюєм свій стек, направлений на PSP

mov CS:_ax, ax

mov CS:_ss, ss

mov CS:_sp, sp

mov ax, cs

mov ss, ax

mov sp, 100h

mov ax, CS:_ax

;зберігаємо регістри в новому стеку

push ax

push bx

push cx

push dx

push si

push di

push es

push ds

cmp CS:Id1, 1;чи був запит

jnz NO1

cmp CS:Id2, 1;чи готовий буфер

jz NO2

call COPY_TO_BUF;копіюємо екран в буфер

mov CS:Id2, 1

NO2:

;провірка прапорців

cmp CS:Id13, 1

jz NO1

cmp CS:Id25, 1

jz NO1

cmp CS:Id26, 1

jz NO1

cmp CS:Id21, 1

jz NO1

mov CS:Id1, 0

mov CS:Id2, 0

NO1:

;відновлюємо регістри

pop ds

pop es

pop di

pop si

pop dx

pop cx

pop bx

pop ax

;відновлюємо старий стек

mov ss, CS:_ss

mov sp, CS:_sp

mov CS:Id3, 0

WORK:

iret

proc08 endp

;переривання 21

proc21 proc FAR

sti

mov CS:Id21, 1

pushf

call dword ptr CS:[per21_1]

mov CS:Id21, 0

retf 2

proc21 endp

;переривання 13

proc13 proc FAR

mov CS:Id13, 1

pushf

call dword ptr CS:[per13_1]

mov CS:Id13, 0

retf 2

proc13 endp

;переривання 25

proc25 proc FAR

mov CS:Id25, 1

pushf

call dword ptr CS:[per25_1]

pop si ;забираємо лишнє слово

mov CS:Id25, 0

;при виході з процедури одне лишнє слово залишається в стеку

retf

proc25 endp

;переривання 28 ще одна точка входу в процедуру BUF_DISK

proc26 proc FAR

mov CS:Id26, 1

pushf

call dword ptr CS:[per26_1]

pop si

mov CS:Id26, 0

retf

proc26 endp

proc28 proc FAR

pushf

call dword ptr CS:[per28_1]

cmp CS:Id2, 1

jnz NET

mov CS:Id3, 1

mov CS:Id1, 0

mov CS:Id2, 0

mov CS:Id3, 0

NET:

iret

proc28 endp

;опрацювання критичних помилок

proc24 proc FAR

mov al, 3

iret

proc24 endp

;опрацювання переривання 23h

proc23 proc FAR

iret

proc23 endp

;інші процедури

;з відеопам'яті в буфер

COPY_TO_BUF proc

;копіюємо екран в буфер

cli

lea di, CS:bufer

xor si, si

mov ax, 0b800h

mov es, ax

mov cx, 2000

xor bl, bl

push cx

push ax

mov ah, 0ah

mov bh, 0

mov cx, 1

mov al, 20h

int 10h

pop ax

pop cx

LOO2:

mov al, ES:[si]

mov CS:[di], al

inc di

add si, 2

inc bl

; вкінці стрічки 13, 10

cmp bl, 80

jnz NO3

xor bl, bl

mov byte ptr CS:[di], 13

inc di

mov byte ptr CS:[di], 10

inc di

NO3:

loop LOO2

sti

ret

COPY_TO_BUF endp

;з буфера на диск

COPY_TO_DISK proc FAR

push ax

push bx

push cx

push dx

push es

push ds

push cs

pop ds

;встановлюємо обробник критичних помилок

mov ax, 3524h

int 21h

mov CS:per24_2, es

mov CS:per24_1, bx

mov ax, 2524h

lea dx, CS:proc24

int 21h

mov ax, 3523h

int 21h

mov CS:per23_2, es

mov CS:per23_1, bx

mov ax, 2523h

lea dx, CS:proc23

int 21h

;відкриваємо файл

mov ah, 3ch

lea dx, CS:Name_file

xor cx, cx

int 21h

jc ex

mov bx, ax

;записуємо в файл вміст екрану

lea dx, CS:bufer

mov ah, 40h

mov cx, 2050

int 21h

;закриваємо файл

mov ah, 3Eh

int 21h

EX:

;відновлюєм обробник критичних помилок

mov ax, 2524h

mov dx, CS:per24_1

mov ds, CS:per24_2

int 21h

mov ax, 2523h

mov dx, CS:per23_1

mov ds, CS:per23_2

int 21h

pop ds

pop es

pop dx

pop cx

pop bx

pop ax

ret

COPY_TO_DISK endp

RES_END:

Search proc

push bx

push ds

push dx

push si

mov si, cs

;знаходимо перший блок

mov ah, 52h

int 21h

mov ES, ES:[bx-2]

mov ax, 1

LOO:

cmp word ptr ES:[1], 0

jz CONT5

push es

pop bx

inc bx

;чи на цім сегменті

cmp si, bx

jz CONT5

mov ds, bx

;чи немає резидента в програмі

mov bx, CS:ident

cmp word ptr DS:[103h], bx

jz _END

CONT5:

; перевіряємо чи це не останній блок

cmp byte ptr ES:[0], 'M'

jz CONT4

xor ax,ax

jmp short _END

CONT4:

;знаходимо адрес заголовку наступного блоку

mov dx, ES:[3]

mov bx, es

add bx, dx

inc bx

mov es, bx

jmp short LOO

_END:

mov bx, es

inc bx

mov es, bx

pop si

pop dx

pop ds

pop bx

ret

Search endp

;встановити вектори

SET_VECT proc

push ax

push bx

push dx

push es

;зберігаємо старі вектори

mov ax, 3509h

int 21h

mov CS:per09_2, es

mov CS:per09_1, bx

mov ax, 3508h

int 21h

mov CS:per08_2, es

mov CS:per08_1, bx

mov ax, 3521h

int 21h

mov CS:per21_2, es

mov CS:per21_1, bx

mov ax, 3513h

int 21h

mov CS:per13_2, es

mov CS:per13_1, bx

mov ax, 3525h

int 21h

mov CS:per25_2, es

mov CS:per25_1, bx

mov ax, 3526h

int 21h

mov CS:per26_2, es

mov CS:per26_1, bx

mov ax, 3528h

int 21h

mov CS:per28_2, es

mov CS:per28_1, bx

;встановлюємо вектори

mov ax, 2509h

lea dx, proc09

int 21h

mov ax, 2508h

lea dx, proc08

int 21h

mov ax, 2521h

lea dx, proc21

int 21h

mov ax, 2513h

lea dx, proc13

int 21h

mov ax, 2525h

lea dx, proc25

int 21h

mov ax, 2526h

lea dx, proc26

int 21h

mov ax, 2528h

lea dx, proc28

int 21h

pop es

pop dx

pop bx

pop ax

ret

SET_VECT endp

;відновити вектори

RE_VECT proc

push ax

push dx

push ds

mov ax, 2509h

mov dx, word ptr ES:[105h]

mov ds, word ptr ES:[107h]

int 21h

mov ax, 2508h

mov dx, word ptr ES:[109h]

mov ds, word ptr ES:[10Bh]

int 21h

mov ax, 2521h

mov dx, word ptr ES:[10Dh]

mov ds, word ptr ES:[10Fh]

int 21h

mov ax, 2513h

mov dx, word ptr ES:[111h]

mov ds, word ptr ES:[113h]

int 21h

mov ax, 2525h

mov dx, word ptr ES:[115h]

mov ds, word ptr ES:[117h]

int 21h

mov ax, 2526h

mov dx, word ptr ES:[119h]

mov ds, word ptr ES:[11Bh]

int 21h

mov ax, 2528h

mov dx, word ptr ES:[11Dh]

mov ds, word ptr ES:[11Fh]

int 21h

pop ds

pop dx

pop ax

ret

RE_VECT endp

;звільнити пам'ять

ERASE proc

mov ah, 49h

int 21h

ret

ERASE endp

;звільнити оточення

free proc

push ax

push es

mov es, DS:[2ch]

call ERASE

pop es

pop ax

ret

free endp

;основна частина програми

BEG:

mov ah, 09h

lea dx, line1

int 21h

lea dx, line2

int 21h

lea dx, line3

int 21h

call Search

cmp ax, 0

jz NO_PR

call RE_VECT

call ERASE

NO_PR:

call SET_VECT

call free

lea dx, line0

mov ah, 09h

int 21h

lea dx, RES_END

int 27h

cod ends

end begin

Додаток В

Результат роботи програми

Размещено на Allbest.ru

...

Подобные документы

  • Розробка резидентної програми за допомогою мови асемблер, яка дозволить перехопити зміст текстового та графічного екрану у файл (відповідно TXT і BMP). Вибір та обґрунтування методу розв'язки даної задачі. Алгоритм і реалізація програми, системні вимоги.

    курсовая работа [14,9 K], добавлен 08.08.2009

  • Розробка резидентної програми на асемблері, яка дозволить перехопити зміст текстового та графічного екрану у файл. Виникнення проблеми нереентерабельності ДОС. Визначення поточного режиму екрану і спосіб запису. Графічне заповнення структури BMP файла.

    курсовая работа [13,2 K], добавлен 12.08.2009

  • Створення двух файлів В1 і В2 з шести двоцифрових цифр з введенням в довільному порядку цифр з клавіатури із записуванням парних цифр в файл В3, а непарних - у файл В4. Процес розробки програми за допомогою мови "Асемблер". Блок-схема алгоритму задачі.

    курсовая работа [37,6 K], добавлен 26.11.2011

  • Інструменти середовища C++Builder, які були використані в програмі. Робота з файлами, їх відкриття, відображення та закриття. Розробка основних функцій для реалізації програми. Тестування програмного забезпечення. Блок-схема та алгоритм програми.

    курсовая работа [924,3 K], добавлен 14.01.2014

  • MS-DOS - перша операційна система. Створення в операційній системі MS-DOS резидентної програми захисту файлів від видалення, її використання в випадках захисту файлів від випадкового видалення. Структура вхідних та вихідних даних, алгоритм рішення задачі.

    курсовая работа [35,5 K], добавлен 16.11.2012

  • Огляд переваг асемблера при роботі резидентної програми русифікатора клавіатури і дисплея. Вивчення різновидів дискет, нутрощів дисковода, функцій базової версії DOS. Аналіз можливостей створення і обробки дискових файлів послідовним і прямим доступом.

    курсовая работа [33,3 K], добавлен 20.04.2012

  • Програмування під DOS мовою низького рівня Асемблер (ASM-86). Функції програми: виведення в довільне місце екрану тексту заданого стилю та кольору, змінення шрифту, розміру літер та напрямку їх виводу. Алгоритм програми, системні вимоги до комп'ютера.

    курсовая работа [47,4 K], добавлен 03.06.2009

  • Дослідження основних завдань та алгоритму роботи програм копіювання файлів: "COPY1.С" (функції роботи з file handles) та "COPY2.С" (функції потокового вводу-виводу). Повний розбір роботи обох кодів програм, їх тестування, модифікація та оптимізація.

    лабораторная работа [23,4 K], добавлен 04.04.2011

  • Файл ssaver.com - резидентна програма, яка має призначення вимкнення екрану при тривалій перерві в роботі з комп’ютером і оберігає екран від передчасної втрати чіткості та кольоровості зображення. Алгоритм програми, функціонування та язик програмування.

    курсовая работа [13,6 K], добавлен 08.08.2009

  • Створення програми для перегляду потрібної інформації, яка може бути використана будь яким користувачем ЕОМ. Користування та розуміння переглядачів текстових файлів. Використання читання тексту порціями для реалізації прокрутки екрану вверх та вниз.

    курсовая работа [16,7 K], добавлен 12.08.2009

  • Написання програм для перейменування файлів та копіювання файлів і підкаталогів (аналоги REN, XCOPY). Вибір методу розв'язки задачі та його обґрунтування. Алгоритм та реалізація програми, її системні вимоги. Інструкція для користувача та лістинг.

    курсовая работа [14,7 K], добавлен 08.08.2009

  • Призначення програми на мові Асемблера: захист файлів від несанкціонованого копіювання. Існуючі методи для захисту файлів від несанкціонованого доступу. Криптографія, прив'язка до місця розташування на диску, ключова дискета з нестандартним форматом.

    курсовая работа [24,9 K], добавлен 08.08.2009

  • Розробка програми для синхронізації та резервного копіювання даних на основі функцій Windows API. Методи отримання шляхів папок. Синхронізація та резервне копіювання файлів або папок. Застосування основ мови програмування С, функцій Windows API.

    курсовая работа [366,5 K], добавлен 21.05.2019

  • Копіювання або переміщення файлів через буфер обміну або за допомогою правої кнопки миші. Копіювання та переміщення файлів методом перетаскування. Пошукові мережеві системи. Організація пошуку інформації в мережі Iнтернет. Класифікація пошукових систем.

    контрольная работа [855,1 K], добавлен 29.01.2010

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

  • Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.

    курсовая работа [14,1 K], добавлен 08.08.2009

  • Центральний мікропроцесор, його призначення та складові параметри. Оболонка Norton Commander, порядок створення каталогу. Копіювання фрагмента тексту між документами MS Word за допомогою буфера обміну. Порядок побудови гістограми в програмі Excel.

    контрольная работа [1,4 M], добавлен 18.10.2012

  • Розробка програми для вирішення графічної задачі. При вирішенні задачі необхідно cтворювати програму у середовищі програмування Turbo Pascal. Розробка алгоритму функціонування програми і надання блок-схеми алгоритму. Демонстрація роботи програми.

    курсовая работа [1,3 M], добавлен 23.06.2010

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

    лабораторная работа [390,3 K], добавлен 27.02.2013

  • Розробка і обґрунтування технічного завдання, вимоги до програмної реалізації та користувача. Можливі варіанти зміни та вдосконалення програми. Початок загального алгоритму вирішення задачі. Структурні зв’язки між функціями програми, її тестування.

    курсовая работа [1,8 M], добавлен 14.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.