оробка переривань в операційній системі MS-DOS

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра програмного забезпечення

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Системне програмування
Група:
ПІ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” КАФЕДРА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ  Звіт Про виконання лабораторної роботи № 1 з дисципліни «Операційні системи та системне програмування» Тема: оробка переривань в операційній системі MS-DOS Завдання Скласти програму, яка б виводила на екран зміст всіх ненульових векторів переривань. Після виклику програма повинна залишатись резидентною. Вектор переривань, яким ініціалізується програма, підібрати самостійно. Використані типи даних ^word; - для опису вказівників на слово, для того щоб в них вмістити адрес сегмента та зміщення всередині цього сегмента; word, integer - для опису цілих змінних, нап., для лічильників у циклі; string - для запису шістнадцяткових номерів, адрес та зміщень var OldVect: procedure; - для запису адреси стандартного обробника переривань. Алгоритм виконання завдання Після початку роботи програми ми зберігаємо стандартний вектор обробки переривань від клавіатури, та заміняємо його на обробник. Обробник перевіряє яка клавіша була натиснута, і якщо це була F12, то він починає виконувати поставлене завдання, інакше управління передається стандартному обробнику переривання. Для виконання завдання, обробник очищає екран, і отримує адреси всіх переривань, якщо вони не нульові, то виводить їх на екран. Для отримання адреси отримуємо сегмент в якому знаходиться переривання та зміщення всередині сегменту, виходячи з того, що переривання починають розміщуватися з нульової адреси оперативної пам’яті. Після виконання програма залишається резидентною в пам’яті. Блок-схема алгоритму роботи програми Текст програми program lab1; uses dos, crt; var OldVect: procedure; ofset,seg:^word;{pointer to WORD} b:word; {dec to hex} function hex(a:word):string; var b,c:integer; d:string; begin d:=''; for b:=0 to 3 do begin c:=a mod 16; if c>9 then c:=c+39; d:=chr(c+48)+d; a:=a div 16; end; hex:=d; end; {F+} procedure GetAllNotNullVect; interrupt; var i: byte; p: pointer; NLineIndex: byte; begin if Port[$60]=$58 then begin clrscr; {pereburaem vsi pereruvannya} for b:=0 to 255 do begin {get segment} seg:=ptr(0,(b*4)); {get offset} ofset:=ptr(0,(b*4+2)); if (seg^<>0)and(ofset^<>0)then begin textcolor(green); write(' ',hex(b),': '); textcolor(blue); write(hex(seg^),':',hex(ofset^)); end; end; end; OldVect; end; {$F-} {$M $2048, 0, 0} Begin clrscr; GetIntVec($9, @OldVect); SetIntVec($9, @GetAllNotNullVect); Keep(0); readln; readln; End. Результат роботи програми: 
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!