РефератыИностранный языкВеВектор переривань та процедура обслуговування переривань

Вектор переривань та процедура обслуговування переривань

Контрольна робота з дисципліни „Програмне забезпечення автоматизованих систем”


Виконав ст. гр. КНз-21 Босак Андрій Олексійович


Луцький інститут розвитку людини Відкритого міжнародного університету розвитку людини „Україна”.


Луцьк 2005.


Звернення до функцій DOS і BIOS здійснюється за допомогою програмних переривань (команда ІNT).


Система переривань машин типу IBM PC у принципі не відрізняється від будь-якої іншої системи векторизованих переривань. Самий початок оперативної пам'яті від адреси 0000h до 03FFh відводиться під вектори переривань - чотирьохбайтові області, в яких зберігаються адреси програм обробки переривань (ПОП). У два старші байти кожного вектора записується сегментна адреса ПОП, в два молодші - відносна адреса точки входу в ПОП в сегменті. Вектори, як і відповідні їм переривання, мають номери, які називаються типами, причому вектор з номером 0 (вектор типу 0) розташовується починаючи з адреси 0, вектор типу 1−з адреси 4, вектор типу 2− з адреси 8 і т.д. Вектор з номером N займає, таким чином, байти пам'яті від N*4 до N*4+2. Всього у виділеній під вектори області пам'яті поміщається 256 векторів.


Одержавши сигнал на виконання процедури переривання з певним номером, процесор зберігає в стеку виконуваної програми слово прапорів, а також сегментну і відносну адресу програмного сегменту (вміст CS і IP) і завантажує CS і IP з відповідного вектора переривань, здійснюючи тим самим перехід на ПОП (рис 1).



Програма обробки переривання зазвичай закінчується командою повернення з переривання IRET, що виконує зворотні дії - завантаження IP, CS і регістра прапорів із стека, що приводить до повернення в основну програму в точку, де вона була перервана.


Запити на виконання процедури переривань можуть мати різну природу. Перш за все розрізняють апаратні переривання від периферійних пристроїв або інших компонентів системи і програмні переривання, що викликаються командою INT, яка використовується, зокрема, для програмного звернення до функцій DOS і BIOS. Сигнали, що збуджують апаратні переривання, можуть ініціюватися ланцюгами самого процесора, наприклад, при спробі виконання операції ділення на нуль (такі переривання називаються внутрішніми, або відмовами), а можуть приходити з периферійного устаткування (зовнішні переривання). Незалежно від джерела, процедура переривання, описана вище, завжди виконується однаково, як для апаратних, так і для програмних переривань.


Велика частина векторів переривань зарезервована для виконання визначених дій; частина з них автоматично заповнюється адресами системних програм при завантаженні системи. Вектори з наступними номерами можуть представляти особливий інтерес для користувача:


00h - ділення на 0;


0lh - покрокове виконання (при TF=1);


02h - немасковане переривання (виведення NMI процесора)


03h - команда INT без числового параметра;


04h - INTO - переривання по переповненню (ініціюється апаратно, але лише за наявності в програмі команди INTO);


08h - переривання від таймера (апаратне);


09h - переривання від клавіатури (апаратне);


0Ah - зарезервовано для підключення нестандартного пристрою (апаратне);


0Bh - другий послідовний порт COM2 (апаратне);


0Сh - перший послідовний порт СОМ1 (апаратне);


0Dh - жорсткий диск (апаратне); 0Eh - гнучкий диск (апаратне);


0Fh - паралельний порт (принтер LPT1) (апаратне);


10h - відеодрайвер BIOS;


13h - драйвер BIOS диска;


16h - драйвер BIOS клавіатури;


17h - драйвер BIOS принтера;


1Bh - обробник переривань по <Ctrl>/<Break>;


1Ch - вхід в програму BIOS обробки переривань від системного таймера (18,2 переривань в секунду);


1Dh - адреса таблиці відеопараметрів, BIOS;


lEh - адреса таблиці параметрів дискети, BIOS;


1Fh - адреса другої половини таблиці шрифтів графічних режимів 4...6, BIOS;


21n - диспетчер функцій DOS;


22h - обробник завершення процесу, DOS;


23h - обробник переривань по <Ctrl>/C;


24h - обробник переривань по критичній помилці;


25h - абсолютне читання диска;


26h - абсолютний запис на диск;


2Fh - мультиплексне переривання DOS;


43h - адреса таблиці шрифтів графічних режимів, BIOS;


60h...66h - переривання користувача;


67h - драйвер додаткової пам'яті LIM EMS;


68h...6Fh - вільні вектори;


70h...7Fh - апаратні переривання ведомого контроллера машин типу AT;


78h...7Fh - вільні вектори;


Flh...FFh - не використовуються.


Як видно з таблиці, вектори переривань можна умовно розбити на наступні групи:


вектори апаратних переривань (08h...0Fh і 70h...77h);


драйвери BIOS (10h, 13h, 16h і т.д.);


програми DOS (21h, 22h, 23h і т.д.);


адреси системних таблиць DOS або BIOS (1Dh, lEh, 43h іт.д.).


Системні програми, адреси яких зберігаються у векторах переривань, в більшості своїй є всього лише диспетчерами, що відкривають доступ до великих груп програм, що реалізують системні функції. Так, відеодрайвер BIOS (векторl0h) включає програми зміни відеорежиму, управління курсором, задання колірної палітри, завантаження шрифтів і багато інших. Особливо характерний в цьому відношенні вектор 21h, через який здійснюється виклик практично всіх функцій DOS: введення з клавіатури і виведення на екран, обслуговування файлів, каталогів і дисків, управління пам'яттю і процесами, служби часу і т.д.


Звернення з прикладної програми до системних функцій здійснюється одноманітно. У регістр АН засилається номер функції (не слід плутати з типом переривання!), в інші регістри − вихідні дані, необхідні для виконання конкретної системної програми. Після цього виконується команда INT з числовим аргументом, що вказуює тип (номер) переривання, наприклад, INT 21h.


Більшість функцій DOS і багато функцій BIOS повертають в флазі перенесення CF код завершення. Якщо функція виконалась успішно CF=0, у разі ж будь-якої помилки CF=1. У останньому випадку в одному з регістрів (найчастіше в АХ) повертається ще і код помилки. Таким чином, типова процедура звернення до системних засобів виглядає таким чином:


mov АН,fun ; fun - номер функції


;Заповнення тих чи інших регістрів (AL, BX, ES,


ВР і ін.)


;параметрами, необхідними для виконання


даної функції


...


int 21h; Перехід у MS-DOS


jc error


;Продовження програми


...


error:cmp AX,1; Аналіз коду завершення


je err1


cmp AX2


je err


...


Аналогічно викликаються і функції BIOS.


Задача на звуковий сигнал


У найпростішому випадку в IBM PC для генерації звуку використовується мікросхема інтегрального таймера 8253 або 8254. Ця мікросхема має три незалежні канали, кожний з яких може програмуватися для роботи в режимі поділювача частоти або генератора одиночних імпульсів. Кожен канал містить 16-розрядний лічильник, в який записується значення дільника частоти або коефіцієнта перерахунку (залежно від режиму роботи). Кожен канал має вхід частоти (clk) і вхід дозволу (gate). На вхід частоти всіх каналів подається імпульсний сигна

л частотою 1,19 Мгц. Канал 0 мікросхеми таймера використовується для вироблення сигналу переривання по таймеру (частотою 18,2 Гц). Канал 1 працює в режиму генерації одиночних імпульсів через кожні 15 мкс. Цей сигнал використовується для регенерації динамічної пам'яті ЕОМ.


Канал 2 мікросхеми початково програмується для роботи в режимі дільника частоти. Вихід каналу використовується для генерації звуку через вбудований динамік. Для управління звуком використовуються біти 0 і 1 системного порту В (мікросхема 8255). Біт 0 використовується для дозволу проходження сигналу на вихід каналу 2 таймера. Сигнал з виходу каналу 2 подається на схему "І", на другий вхід який подається сигнал біта 1 системного порту В. Цей сигнал може вирішувати або забороняти проходження сигналу з виходу каналу 2 таймера, а при закритому каналі 2 (бітом 0 порту В) сигнал біта 1 порту В може використовуватися для безпосередньої генерації звуку в динаміку.


Адреса системного порту В - 61h, адреси каналів таймера - 40h, 41h, 42h, 43h - для каналів 0, 1, 2 і регістра, що управляє, відповідно. Нижче розглянуті приклади генерації звуку за допомогою сигналу біта 1 системного порту В, а також за допомогою таймера. Розглянутий випадок генерації звуку з використанням переривання.


Приклади генерації звуку


Завдання 1. Написати програму, що видає різні звуки при натисненні на клавіші '1' і '2'. Для генерації звуку слід використовувати сигнал біта 1 системного порту В. Виход з програми повинен здійснюватися по натисненню клавіші 'q'.


Assume CS: Code, DS: Code


Code SEGMENT


org 100h


frequency1 equ 300 ; Затримкапереключення 1


frequency2 equ 500 ; Затримкапереключення 2


number_cycles1 equ 1000 ; Кількість циклів (трив.)


number_cycles2 equ 600 ; Кількість циклів (трив.)


port_b equ 61h ; Адреса системного порта В


.286


Start proc near


mov ax,cs


mov ds,ax ; DS = CS


beg1: call kbin ; Опитування клавіатури


cmp al,'1' ; = '1' ?


jnz beg2 ; Ні


callton1 ; Звуквисоти 1


jmp beg1 ; Перехіднапочаток циклу


beg2: cmp al,'2' ; = '2' ?


jnz beg3 ; Ні


call ton2 ; Звуквисоти 2


jmp beg1 ; Перехід на початок циклу


beg3: cmp al,'q' ; = 'q' ?


jnz beg1 ; Ні


int 20h ; Вихідзпрограми


startendp


ton2 procnear ; Процедура генерації звука 2


mov dx,number_cycles2 ; Тривалість 2


mov di,frequency2 ; Затримка 2


jmp ton0 ; Перехіднауніверсальнупроцедуругенерації звука


ton1 proc near ; Процедура генерації звука 1


mov dx,number_cycles1 ; Тривалість 1


mov di,frequency1 ; Затримка 1


; Універсальнапроцедурагенерації звука


; DX - кількість циклів, DI - затримка


ton0 proc near


cli ; Заборона переривань


in al,port_b ; Читанння стану системн. порту В


and al,11111110b ; Відкл. динаміка від таймера


ton01: or al,00000010b ; Включення динаміка


out port_b,al ; Запис в системний порт В


mov cx,di ; Лічильник циклу затримки


loop $ ; Затримка


; Вимкнення звука


and al,11111101b ; Вимкнення динаміка


out port_b,al ; Запис в системний порт В


mov cx,di ; Лічильник циклу затримки


loop $ ; Затримка


dec dx ; Декремент лічильника кількість циклів


jnz ton01 ; Перехід на початок нового періода


sti ; Дозвіл переривань


ret ; Вихід з процедури


ton0 endp ; Кінець універсальної процедури


ton1 endp ; Кінець процедури генерації звука 1


ton2 endp ; Кінець процедури генерації звука 2


kbin proc near ; Ввод з клавіатури з очікуванням


mov ah,0 ; Функція 0


int 16h ; клавіатурного переривання


ret ; Вихід з процедури


kbinendp ; Кінець процедури вводу з клавіатури


code ends ; Кінець сегмента (кодового)


END Start ; Вказівка на точку входа


Завдання 2. Написати програму, що видає різні звуки при натисненні на клавіші '1' і '2'. Для генерації звуку слід використовувати вихід каналу 2 таймера. Вихід з програми повинен здійснюватися по натисненню клавіші 'q'.


Assume CS: Code, DS: Code


Code SEGMENT


org 100h


frequency1 equ 1000 ; Коефіц. ділення 1


frequency2 equ 3000 ; Коефіц. ділення 2


duration equ 50000 ; Тривалість


port_b equ 61h ; Адреса системного порта В


.286


Start proc near ; Основна процедура


movax,cs


movds,ax ; DS = CS


beg1: call kbin ; Опитування клавіатури


cmp al,'1' ; = '1' ?


jnz beg2 ; Ні


callton1 ; Звуквисоти 1


jmp beg1 ; Перехіднапочаток циклу


beg2: cmp al,'2' ; = '2' ?


jnz beg3 ; Ні


call ton2 ; Звуквисоти 2


jmp beg1 ; Перехід на початок циклу


beg3: cmp al,'q' ; = 'q' ?


jnz beg1 ; Ні


int 20h ; Вихідзпрограми


startendp ; Кінець основної процедури


ton2 procnear ; Процедура генерації звука 2


movdx,duration ; Тривалість


movdi,frequency2 ; Коефіцієнт ділення 2


jmp ton0 ; Перехід на універсальну процедуру


ton1 proc near ; Процедура генерації звука 1


mov dx,duration ; Тривалість


mov di,frequency1 ; Коефіцієнт ділення 2


; Універсальна процедура генерації звука


; DX - тривалість, DI - коефіц. ділення


ton0 proc near


cli ; Заборона переривань


; Включення динаміка і таймера


in al,61h ; Читання стану системного порта В


or al,3 ; Дозвіл звучання (біти 0 и 1)


out 61h,al ; Запис в системний порт В


; Програмування поділювача частоти 2 канала


mov ax,di ; Поділювач частоти


out 42h,al ; Мол.байт частоти  канал 2 таймера


xchgal,ah ; AH  AL


out 42h,al ; Ст.байт частоти  канал 2 таймера


; Формування затримки


mov cx,dx ; Лічильник циклу затримки


ton01: push cx ; Команди, що використовуються тільки для


pop cx ; збільшення трив. цикла затримки


loop ton01 ; Затримка


; Виключення звука


in al,61h ; Читання стану системного порта В


and al,0fch ; Заборона звучання (биты 0 и 1)


out 61h,al ; Запис в системний порт В


sti ; Дозвіл переривань


ret ; Вихід з піроцедури


ton0 endp ; Кінець універсальної процедури


ton1 endp ; Кінець процедури генерації звука 1


ton2 endp ; Кінець процедури генерації звука 2


kbin proc near ; Ввод з клавіатури і перевірка на вибір гри


kbinendp


codeends ; Кінець сегмента (кодового)


END Start ; Вказівка на точку входу


Список литературы


Финогенов К. Г. «Самоучитель по системным функциям MS-DOS». М.: 1993.


Пирогов В. Ю. «Ассемблер. Учебный курс».


В контрольній роботі також використовувались матеріали сайту http://www.BankReferatov.ru ,перекладені на українську мову.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Вектор переривань та процедура обслуговування переривань

Слов:2032
Символов:15683
Размер:30.63 Кб.