• Новости
  • Темы
    • Экономика
    • Здоровье
    • Авто
    • Наука и техника
    • Недвижимость
    • Туризм
    • Спорт
    • Кино
    • Музыка
    • Стиль
  • Спецпроекты
  • Телевидение
  • Знания
    • Энциклопедия
    • Библия
    • Коран
    • История
    • Книги
    • Наука
    • Детям
    • КМ школа
    • Школьный клуб
    • Рефераты
    • Праздники
    • Гороскопы
    • Рецепты
  • Сервисы
    • Погода
    • Курсы валют
    • ТВ-программа
    • Перевод единиц
    • Таблица Менделеева
    • Разница во времени
Ограничение по возрасту 12
KM.RU
Рефераты
Главная → Рефераты → Иностранный язык
  • Новости
  • В России
  • В мире
  • Экономика
  • Наука и техника
  • Недвижимость
  • Авто
  • Туризм
  • Здоровье
  • Спорт
  • Музыка
  • Кино
  • Стиль
  • Телевидение
  • Спецпроекты
  • Книги
  • Telegram-канал

Поиск по рефератам и авторским статьям

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

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

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

Виконав ст. гр. КНз-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    ; Ні

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

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                    ; Вихід з процедури

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   ; Мол.байт частоти  канал 2 таймера

  xchg     al,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     ; Ввод з клавіатури і перевірка на вибір гри

kbin        endp

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

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

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

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

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

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

Дата добавления: 03.02.2005

База рефератов на портале KM.RU существует с 1999 года. Она пополнялась не только готовыми рефератами, докладами, курсовыми, но и авторскими публикациями, чтобы учащиеся могли использовать их и цитировать при самостоятельном написании работ.


Это популяризирует авторские исследования и научные изыскания, что и является целью работы истинного ученого или публициста. Таким образом, наша база - электронная библиотека, созданная в помощь студентам и школьникам.


Уважаемые авторы! Если Вы все же возражаете против размещения Вашей публикации или хотите внести коррективы, напишите нам на почту info@corp.km.ru, мы незамедлительно выполним Вашу просьбу или требование.


официальный сайт © ООО «КМ онлайн», 1999-2025 О проекте ·Все проекты ·Выходные данные ·Контакты ·Реклама
]]>
]]>
Сетевое издание KM.RU. Свидетельство о регистрации Эл № ФС 77 – 41842.
Мнения авторов опубликованных материалов могут не совпадать с позицией редакции.

Мультипортал KM.RU: актуальные новости, авторские материалы, блоги и комментарии, фото- и видеорепортажи, почта, энциклопедии, погода, доллар, евро, рефераты, телепрограмма, развлечения.

Карта сайта


Подписывайтесь на наш Telegram-канал и будьте в курсе последних событий.


Организации, запрещенные на территории Российской Федерации
Telegram Logo

Используя наш cайт, Вы даете согласие на обработку файлов cookie. Если Вы не хотите, чтобы Ваши данные обрабатывались, необходимо установить специальные настройки в браузере или покинуть сайт.