Смекни!
smekni.com

Програма Txtprintcom - резидентна програма для швидкого і зручного друкування виборчого тексту (стр. 1 из 4)

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

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

з дисципліни “Програмування на мові ASM-86” на тему:

Програма TXTPRINT.COM - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану


Зміст

Вступ.

1. Призначення та область використання системи.

2. Огляд iснуючих систем. Обґрунтуваннявибору принципу розробки та методикипобудови системи. Постановка задачі пореалізації технічного завдання

3. Опис та обґрунтування проектних рішеньпо проектуванню системи.

4. Разрахунки та експерементальні матеріали якіпідтверджують вірність програмних рішень

5. Основнi висновки

Перелiк скорочень, символiв та спецiальних термiнiв.

Список лiтератури.

Анотацiя.

Додатки.

Текст програми.


Вступ

Програма txtprint.com - резидентна програма, яка предназначена для того, щоб швидко і зручно надрукувати виборчий текст з екрану. Це може бути корисним, коли доводиться аналізувати в водночас багато текстової інформаціі, наприклад різні файли-помічники, текст іншої програми, та багато ін. Також ця програма може стати у пригоді тоді, коли треба надрукувати текстовий файл, але не повністю, окремими епізодами. Програма дуже зручна для її використання, займає усього 2 килобайти DOS - пам`яті, також її можна вилучити з пам`яті в будь-який час. Просто і зрозуміло оформлен інтерфейс з користувачем, отже навчитись роботі з програмою TXTPRINT.COMможна за хвилину.

Також в програмі встановлено тест на подвійну загрузку, отже при спробі завантажити її вдруге користувач отримає повідомлення про це, а також програма нагадае про «гарячі»клавіші, таким чином запобігаючи подвійного завантаження. Програма не конфліктує з іншими резидентними програмами (якщо, звісно, вони працюють коректно), але в разі змінення ними хочаб одного з векторів преривань INT 08H, INT 09H, INT 28H, INT 2FH програма TXTPRINT.COM не в змозі буде вилучитись з пам`яті по вимозі користувача. Про це програма видасть повідомлення, і нагадає про причину цього (не на вершині). Але після вилучення з пам`яті тієї програми, що змінила вище перечислених векторів преривань, при подальшої вимоги користувача програму TXTPRINT.COM теж буде вилучено з пам`яті.


1. Призначення та область використання системи

Програма TXTPRINT.COM призначена для друку на принтері вибіркового тексту з екрану. Також її можна використовувати в учбових закладах для полегчення і прискорення засвоєння потрібної документації з комп`ютера (різні HELP-програми, завдання задач та ін.). Для цього користувачу потрібно перед переглядом документації на комп`ютері завантажити програму TXTPRINT.COM і в потрібний час викликати її за допомогою «гарячих» клавиш. Потім помітити потрібну частину тексту і дати команду «печатати». Після чого цей текст розпечатається на принтері, і буде більш зручнішим для прочитання та багаторазового перегляду під час виконання роботи (лабораторної тощо). Програма має дуже простий і зручний інтерфейс, що дуже полегшує роботу з нею, займає усього 2 кілобайти DOS-пам`яті.

Також ця програма дуже цікава з точки зору вивчення резидентних програм. На її прикладі можна обучати студентів по роботі з функціями DOS в резидентних програмах.

2. Огляд існуючих систем, обґрунтування виборупринципу розробки та методики побудови системи. Постановка задачі по реалізації технічного завдання

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

Програма TXTPRINT.COM повинна бути резидентною, працювати швидко та надійно при різних процесорах, а також займати якомога менше пам`яті. Тому задача розроблялась на мові асемблера (ASM-86) для TASM версії не нижче 2.0.

Програма повинна:

-бути резидентною і не конфліктувати з операційною системою та іншими програмами;

-викликатись по натисненню «гарячих» клавиш; мати дружній інтерфейс з користувачем;

-розпечатувати помічений текст з екрану;

-не завантажуватись в друге;

-займати якомога менше пам`яті;

-по вимозі користувача вилучатись з пам`яті.

По обґрунтуванню та реалізації цього завдання см. розділ 3.

3. Опис та обґрунтування проектних рішень по проектуванню системи

Усе, що приводиться у цьому параграфi вiдноситься тiльки до "випригуючих" (popup) резидентних програм.

Реентабельною (повторно входимою) програмою називаеться програма чи процедура, одна копiя якої в пам`ятi може бути одночасно викликатись кiлькома процесами, при чьому рiзноманiтнi виповнювання цiєї процедури не впливають одна на одну.

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

Найпростiше рiшення цiєї проблеми складається у повнiй вiдмовi вiд використання системного сервiсу DOS в резидентних програмах. Iнколи це не дуже складно. Так, для виводу на дiсплей можна користуватись прериванням BIOS 10H чи прямим записом у вiдеобуфер, для вводу символiв з клавiатури приємлимо користуватись прериванням 16H, при роботi з принтером i послiдовними портами також неважко працювати на рiвнi BIOS. Але у разi, коли потрiбен дисковий ввод - вивод, це вже стає дуже проблематичним.

Працювати з дисками средствами BIOS - дiйсно дуже хлопотна справа.

Iснують i iншi ситуацiї, коли зручнiше було б використовувати функцiї DOS. Отже, треба навчитися перемагати нереентабiльнiсть DOS. Для цього iснує багато можливостей.

Почнем з того, що існує простий (хоча й недокументований) спосiб запобiгнути конфлiктiв з операційною системою. При активiзацiї програма може перевiрити байтовий прапорець активнiстi DOS i, якщо вiн вiдмiнний вiд нуля (сервiс DOS недоступний), повернутись до пасивного стану. Адресу цього прапорця повiдомляє функцiя DOS 34H.


Функція 34H. Дає адресу прапорця активністі DOS

Виклик: AH = 34H

Повертає: ES:BX- адреса прапорця

Нажаль, якщо вибрати цей путь, така резидентна программа, скоріше за все, взагалі буде не взмозі стартувати. Це пов`язано з тим, що COMMAND.COM та багато інших програм проводять багато часу в очикуванні ввода строки з клавіатури посредством функції DOS 0AH, і, отже, прапорець активністі DOS майже завжди взведений. Ця обставина використовується у диспетчері функцій DOS, який може мати вигляд на зразок цього:


Int_21h PROC far

sti

pushf

cmp ah,0Ah ; якщо номер функції не рівний 0ah,

jnzExec ; то приступити к виконанню.

Fn0Ah:

pushax ; якщо функція 0ah, то затримати

movah,0bh ; її виповнення до тіх пір, поки у

int 21h ; буфері клавіатури не з`явиться

cmpal,0 ; хочаб один символ.

pop ax

jnz Exec

push cx

mov cx,4000h

Delay: loop Delay ; зробити паузу

pop cx

jmp short Fn0Ah ; і повторити перевірка буфера.

Exec:

or byte ptr cs:DOS_busy,01h ; встановити признак

; зайнятості DOS.

Popf ; визвати початковий обробник.

pushf

call dword ptr cs:[Int_21h_vect]

pushf

and byte ptr cs:DOS_busy,0feh ; скинути признак

; зайнятості.

popf

ret 2

Int_21h_vect dd ?

Dos_busy db 0

Int_21h ENDP

Запит на виконання функції 0AH не передається одразу до операційної системи. Замість цього периодично перевіряється стан буфера вводу (функція DOS 0BH або функція 01H преривання 16H). І вже тільки після того як буфер почав заповниватися, визивається функція 0AH. Оберніть увагу на те, як оформлен возврат у програму - це викликано тим, що DOS використовує прапорець CF в якості признаку помилки.

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

Диспетчер функцій DOS - приємлимий, але не найбільш вдалий спосіб перевагання нереєнтабільності DOS. Програмам, використовуючим його, далеко не завжди вдається стартувати. Крім того, їм приходиться аналогічним чином відслежувати ще й преривання 25H (читати сектор), 26H (писати сектор) DOS, а також преривання 13HBIOS.

Обробники преривань 25Hі26Hвиявляються звичайними функціями - під час повернення управління вони залишають в стеці регистр прапорців. А це класичний приклад помилки, якій в наслідок увішов у документацію.

Найбільш цікавими можливостями преодоління нереєнтабільністі DOS пов`язані з використовуванням недокументованого преривання 28H. Це преривання використовується резидентними процесами самої операційної системи, наприклад, PRINT, та генерується як раз під час виконання функцій DOS, коли прапорець активністі DOS взведений, але система знаходиться у безпечному стані.

За допомогою преривання 28H можна досягнути потрясаючих результатів. Отже, така програма може стартувати, наприклад, під час копіювання файлів, а іноді при форматуванні диску.

При натисканні на «гарячу» клавишу не відбувається негайна активізація програми, а лише встановлюється битовий прапорець, повідомляючий, що поступила команда стартувати. Обробник преривання 28H перевіряє стан прапорця, і, якщо прапорець встановлен, а програма ще не активна, активізує її. На прикінці роботи управління завжди передається завжди повинне передаватись початковому обробнику. Програми, які виконуються усередині преривання 28H, не повинні користуватись функціями DOS з номерами 00H - 0CH.