1   2   3   4   5   6   7   8
Ім'я файлу: ЗВІТ КУРСАЧА - РЕЗИДЕНТНИЙ КАЛЬКУЛЯТОР.docx
Розширення: docx
Розмір: 511кб.
Дата: 05.11.2021
скачати

3.7. Переривання INT 13h


Оброблювач переривання INT 13h складений на мові асемблера. Його єдине призначення - збільшення значення прапора unsafe_flag при кожному виклику переривання INT 13h і зменшення при поверненні з цього переривання. Коли програма TSRDEMO буде робити спробу активізації під час обробки переривання INT 13h, вона перевірить значення прапора unsafe_flag. Якщо воно не буде дорівнює 0, активізація неможлива, так як в даний момент часу виконується обробка переривання INT 13h.

Оригінальний текст обробника переривання INT 13h представлений нижче:

_new_int13 proc far

push ax

push ds

mov ax, DGROUP

mov ds, ax

inc word ptr _unsafe_flag

pop ds

pop ax

pushf

call cs: old_int13

push ax

push ds

mov ax, DGROUP

mov ds, ax

dec word ptr _unsafe_flag

pop ds

pop ax

ret 2

_new_int13 endp

Для забезпечення можливості адресації глобальної змінної unsafe_flag регістр DS встановлюється на сегмент даних програми TSRDEMO.

Адреса старого обробника переривання INT 13h знаходиться у змінній old_int13, куди він записується функцією get_int_13. Ця функція викликається з функції tsrinit.

РОЗДІЛ ІV

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


Для вивантаження програми TSRDEMO з пам'яті її потрібно запустити з параметром u. Що відбувається в цьому випадку?

Функція main викликає функцію unload. Та, в свою чергу, намагається виконати видалення копії програми TSRDEMO з пам'яті, викликаючи для цього функцію tsrunload. Залежно від успіху цієї операції функція unload виводить на екран відповідне повідомлення.

Функція tsrunload складена на мові асемблера.  Коротко про те, що робить ця функція. Перш за все, вона зберігає вміст регістрів SS: SP і DS в глобальних змінних. Потім вона завантажує адресу точки входу ExitTSR в регістри BX: DX і викликає переривання INT 2Fh, передаючи в регістрі AX команду вивантаження програми з пам'яті - значення FF01h.

Тепер в справу включається оброблювач переривання INT 2Fh, встановлений завантаженої резидентної програмою TSRDEMO. Ось відповідний фрагмент цього обробника:

else if (ax == 0xff01)

{ExitAddress = ((long) bx << 16) + dx;

if (! tsr_already_active)

{_enable ();

tsr_exit ();

ax = 0xFFFF;

tsr_already_active = -ax;}}

Отриманий адресу зберігається в глобальній змінній ExitAddress, слідом за чим викликається функція tsr_exit.

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

Для відновлення використовується функція RestoreIntVect, яка перевіряє, чи не були змінені вектори переривання ще раз, наприклад, інший резидентну програму, запущеної після програми TSRDEMO.

Якщо все вектори переривань вдалося відновити, резидентную програму можна видалити з пам'яті. Для цього використовується простий спосіб: резидентна програма робиться поточної, після чого її робота завершується за допомогою функції 4Ch переривання INT 21h. Це стандартний спосіб завершення роботи програми, при якому MS-DOS видаляє всі пов'язані з нею блоки пам'яті.

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

РОЗДІЛ V


ПРОГРАМНА РЕАЛІЗАЦІЯ ІНДИВІДУАЛЬНОГО ЗАВДАННЯ

5.1. Постановка задачі


Створення резидентного калькулятора.

5.2. Аналіз задачі


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

5.3. Інтерфейс користувача


Інтерфейс резидентного калькулятора на рис.1.



Рис.1 «Інтерфейс резидентного калькулятора»

5.4. Інструкція користувача


  1. Завантажити на комп’ютер емулятор операційної системи MS-DOS;

  2. Запустити емуляцію MS-DOS;

  3. В консолі прописати шлях до файлу TSRDEMO.EXE, який запускає програму;

  4. Відкрити програму прописавши в консолі «TSRDEMO.EXE» нажавши клавішу Enter.

1   2   3   4   5   6   7   8

скачати

© Усі права захищені
написати до нас