Читать курсовая по информатике, вычислительной технике, телекоммуникациям: "Програма Txtprintcom - резидентна програма для швидкого і зручного друкування виборчого тексту" Страница 3
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя »
обставина використовується у диспетчері функцій DOS, який може мати вигляд на зразок цього:
Int_21h PROC far
sti
pushf
cmp ah,0Ah ; якщо номер функції не рівний 0ah,
jnz Exec; то приступити к виконанню.
Fn0Ah:
push ax; якщо функція 0ah, то затримати
mov ah,0bh ; її виповнення до тіх пір, поки у
int 21h; буфері клавіатури не з`явиться
cmp al,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_busydb 0
Int_21h ENDP Запит на виконання функції 0AH не передається одразу до операційної системи. Замість цього периодично перевіряється стан буфера вводу (функція DOS 0BH або функція 01H преривання 16H). І вже тільки після того як буфер почав заповниватися, визивається функція 0AH. Оберніть увагу на те, як оформлен возврат у програму - це викликано тим, що DOS використовує прапорець CF в якості признаку помилки.
Важливо те, що в описаному прикладі можна відмовитись від перевірки недокументованого прапорця активністі DOS. Замість того диспетчер встановлює свій власний прапорець, який дотого ж бітовий, отже він може бути об`єднан з іншими прапорцями резидентної програми.
Диспетчер функцій DOS - приємлимий, але не найбільш вдалий спосіб перевагання нереєнтабільності DOS. Програмам, використовуючим його, далеко не завжди вдається стартувати. Крім того, їм приходиться аналогічним чином відслежувати ще й преривання 25H (читати сектор), 26H (писати сектор) DOS, а також преривання 13H BIOS.
Обробники преривань 25H і 26H виявляються звичайними функціями - під час повернення управління вони залишають в стеці регистр прапорців. А це класичний приклад помилки, якій в наслідок увішов у документацію.
Найбільш цікавими можливостями преодоління нереєнтабільністі DOS пов`язані з використовуванням недокументованого преривання 28H. Це преривання використовується резидентними процесами самої операційної системи, наприклад, PRINT, та генерується як раз під час виконання функцій DOS, коли прапорець активністі DOS взведений, але система знаходиться у безпечному стані.
За допомогою преривання 28H можна досягнути потрясаючих результатів. Отже, така програма може стартувати, наприклад, під час копіювання файлів, а іноді при форматуванні диску.
При натисканні на «гарячу» клавишу не відбувається негайна активізація програми, а лише встановлюється битовий прапорець, повідомляючий, що поступила команда стартувати. Обробник преривання 28H перевіряє стан прапорця, і, якщо прапорець встановлен, а програма ще не активна, активізує її. На прикінці роботи управління завжди передається завжди повинне передаватись початковому обробнику. Програми, які виконуються усередині преривання 28H, не повинні користуватись функціями DOS з номерами 00H - 0CH.
А як буть, коли довгий час не відбувається звертання до функцій DOS і, отже, не вироблялось преривання 28H? ПроРграма знов не в змозі стартувать. Щоб запобігнути цього, буде потрібна ще одна точка входу, в якісті якої зручно буде обрати обробник якогось часто возникаючого преривання, наприклад, від таймеру. Тоді перед
- 1
- 2
- 3
- 4
- 5
- . . .
- последняя »
Похожие работы
Интересная статья: Быстрое написание курсовой работы

(Назад)
(Cкачать работу)