Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Завдання на роботу. 1 Написати програму на Turbo Assembler для виконання завдання відповідно до заданого варіанту1 Написати програму на Turbo Assembler для виконання завдання відповідно до заданого варіанту. Крім того для усіх завдань передбачити коректне завершення роботи програми після натискання клавіші [Esc].
Таблиця 20.5 – Варіанти завдань
Продовження таблиці 20.5
2 Здійснити компіляцію програм. 3 Виконати трасування програми за допомогою Turbo Debugger. 4 Зробити висновки за результатами роботи.
20.4 Контрольні запитання
1 Чим відрізняється годинник реального часу і системний таймер? 2 Назвіть переривання системного таймера та годинника реального часу. 3 Назвіть мінімальний часовий інтервал, що можна від слідкувати за допомогою системного таймера та годинника реального часу.
ЛАБОРАТОРНА РОБОТА №21
РЕЗИДЕНТНІ ПРОГРАМИ
21.1 Мета роботи
Навчитися створювати прості резидентні програми для перехоплення та обробки подій з портів периферійних пристроїв.
21.2 Теоретичні відомості
Програми, що залишаються в пам’яті, після того як керування повертається в DOS, називаються резидентними. Для того, щоб залишити програму (або її частину) в пам’яті використовують функції DOS 27h та 31h переривання 21h. Також розрізняють напіврезидентні програми - це програми, що загружають і виконують іншу програму, залишаючись при цьому в пам’яті, а після того як завантажена програма виконана, вони теж закриваються. Напіврезидентна програма може містити обробники переривань, що будуть діяти увесь час, поки працює завантажена з-під неї звичайна програма. Так що, з погляду даної дочірньої програми, напіврезидентна програма функціонує як звичайна резидентная. Такі програми зручно використовувати для внесення змін і доповнень в існуючі програми, якщо не можна внести виправлення прямо в їхній виконавчий код. Резидентні програми прийнято розділяти на активні і пасивні, в залежності від того, чи перехоплюють вони переривання від зовнішніх пристроїв чи одержують керування, тільки якщо програма спеціально викликає команду int з потрібним номером переривання і параметрами. Щоб вигрузити резидентну програму з пам’яті, необхідно виконати наступне: закрити відкриті програмою файли і пристрої, відновити всі перехоплені вектори переривань, і нарешті, звільнити всю зайняту програмою пам'ять. Спрощену структуру резидентної програми на мові Assembler подано нижче: .286 code segment org 100h assume cs:code, ds:code intNumber equ …;номер периравання, що перехоплюється
start: jmp install
intMyFunc proc push ds push cs;забезпечити звертання до змiнних pop ds;без використання префiксу cs: ;текст резидентної частини до стандартного обробника переривання
pushf call [dword ptr old_ip] ;текст резидентної частини після стандартного обробника переривання
pop ds iret endp
old_int:;змiннi для збереження старої адреси old_ip dw 0;вектора intNumber old_cs dw 0
install: mov ah, 35h mov al, intNumber int 21h;отримати адресу попереднього вектора ;переривання intNumber mov [old_ip], bx;зберегти молодше слово адреси в old_ip mov [old_cs], es;зберегти старше слово адреси в old_cs
mov ah, 25h mov al, intNumber mov dx, offset intMyFunc int 21h;встановити нову адресу вектора
mov dx, offset install;завершити роботу i залишити резидентною int 27h;частину програми по мiтку install ends end start
|