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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

З М І С Т

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.

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.