Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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
Date: 2015-12-12; view: 418; Нарушение авторских прав |