Структура резидентних програм. Обробка переривань від клавіатури

Страницы работы

Содержание работы

З М І С Т

1. Структура резидентних програм............................................................................................................................ 3

2. Обробка переривань від клавіатури............................................................................................................................ 6

3. Обробка переривань від клавіатури з підключенням після системного обробника.................................................................................................................... 12


1.Структура резидентних програм.

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

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

text    segment 'code'

assume CS:text,OS:text

org     lOOh main    proc

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

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

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

main    endp

Init    proc    ;Секция инициализации

mov  OX,(init-ma1n+lOFh)/16 ;Размер в параграфах

mov  АН.3100h      ,  ;Функция "завершить и оставить в

int  21h  ;памяти"

init    endp text    ends

end  main

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

При запуску програми з клавіатури управління передається (відповідно до параметра директиви end) на початку процедури main. Командою jmp відразу ж здійснюється перехід на секцію ініціалізації, яка може бути оформлена у вигляді окремої процедури або входити до складу процедури main. У секції ініціалізації, зокрема, готуються умови для подальшої активізації програми вже в резидентному стані. Останніми рядками секції ініціалізації викликається функція DOS 31h, яка виконує завершення програми із залишенням в пам'яті вказаної її частини. Розмір резидентної частини програми (у параграфах) передається цій функції DOS в регістрі DX. Визначити розмір резидентної секції можна, наприклад, таким чином. До різниці зсувів init-main, яка рівна довжині резидентної частини програми в байтах, додається розмір PSP (l00h) і ще число 15 (Fh) для того, щоб після цілочисельного ділення на 16 результат був округлений в більшу сторону.

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

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

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

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

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

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


2. Обробка переривань від клавіатури.

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

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

Похожие материалы

Информация о работе