ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Іноземна мова

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

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

    Виконав ст. гр. КНЗ-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 -- обробник переривання по /;

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

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

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

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

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

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

    23h -- обробник переривання по/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; Ні

    call ton1; Звук висоти 1

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

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

    jnz beg3; Ні

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

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

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

    jnz beg1; Ні

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

    start endp

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

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

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

    jmp ton0; Перехід на універсальну процедуру генерації звуку 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; Вихід з процедури

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

    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; Основна процедура

    mov ax, cs

    mov ds, ax; DS = CS

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

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

    jnz beg2; Ні

    call ton1; Звук висоти 1

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

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

    jnz beg3; Ні

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

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

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

    jnz beg1; Ні

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

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

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

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

    mov di, 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 ; Мол.байт частоти

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати !