ПЕРЕРИВАННЯ (Системні виклики).

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

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

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

Рік:
2024
Тип роботи:
Практична робота (завдання)
Предмет:
Системне програмування та операційні системи

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

системне програмування Практична робота № 2 ПЕРЕРИВАННЯ (Системні виклики). Механізм і типи переривань Для обробки подій, що відбуваються асинхронно стосовно виконання програми, найкраще підходить механізм переривань. Переривання можна розглядати як деяку особливу подію в системі, що потребує моментальної реакції. Наприклад, добре спроектовані системи підвищеної надійності використовують переривання по аварії в мережі живлення для виконання процедур запису вмісту регістрів і оперативної пам'яті на магнітний носій, із тим щоб після відновлення живлення можна було б продовжити роботу з того ж місця. Означення. Переривання це операція, що призупиняє виконання програм для спеціальних системних дій. Необхідність переривань обумовлена двома основними причинами: навмисний запит таких дій, як операції вводу-виводу на різні пристрої і непередбачені програмні помилки (наприклад, переповнення при діленні). Система BIOS (Basic Input/Output System) знаходиться в ROM і керує всіма перериваннями в системі. Оскільки переривання можуть виникати за різноманітними причинами, кожному перериванню присвоюється номер переривання, з яким зв'язується та або інша подія. Система в разі надходження тої чи іншої події запускає відповідну процедуру реакції на подію. За джерелом і характером виникнення переривання розділяються на групи (Рис. 1): Переривання       Апаратні Програмні       Зовнішні Внутрішні      Масковані Немасковані    Рис. 1. Програмні переривання викликаються самими програмами, тому вони не є асинхронними. Для цього вони використовують команду INT. Програмні переривання зручно використовувати для організації доступу до окремих спільних для всіх програм модулів. Наприклад, програмні модулі операційної системи доступні прикладним програмам саме через переривання, і немає необхідності при виклику цих модулів знати їхню поточну адресу в пам'яті. Прикладні програми самі можуть встановлювати свої обробники переривань для їхнього наступного використання іншими програмами. Для цього обробники переривань, що вбудовуються, повинні бути резидентними в пам'яті. Апаратні переривання викликаються фізичними пристроями і надходять асинхронно. Ці переривання інформують систему про події, пов'язані із роботою пристроїв, наприклад, про те, що завершено друк символу на принтері і можна видати наступний символ, або про те, що потрібний сектор диска вже прочитано і його вміст доступний програмі. Використання переривань при роботі з повільними зовнішніми пристроями дозволяє сполучити ввід/вивід з обробкою даних в центральному процесорі і в результаті підвищує загальну продуктивність системи. Зовнішні апаратні переривання викликаються сигналами, зовнішніми стосовно центрального процесора, і подаються на його входи INT і NMI. Переривання по вході INT відносяться до апаратних маскованих переривань, оскільки можуть бути дозволені або заборонені прапором IF регістра прапорів. Номер вектора переривань, що маскуються, передається до процесора по його вісьми молодших розрядах шини даних. Вхід немаскованого переривання NMI звичайно використовується для повідомлень про "катастрофічні" події (відключення живлення, виявлення помилок пам'яті і т.д.). Номер цього переривання дорівнює 2. Внутрішні (логічні) переривання формуються безпосередньо процесором, коли виникає така особлива ситуація, як, наприклад, ділення на 0. Ці переривання мають номери 0, 1, 3, 4 (див. таблицю). Обслуговування переривань У комп'ютерах IBM PC ROM знаходиться за адресою FFFF0H. При включенні комп'ютера процесор встановлює стан скидання, виконує контроль парності, встановлює в регістрі CS значення FFFFh, а в регістрі IP – нуль, тому перша команда, що буде виконуватися знаходиться за адресою FFFF:0 чи FFFF0, що є точкою входу в BIOS. BIOS перевіряє різні порти комп'ютера для визначення й ініціалізації підключених пристроїв. Потім BIOS створює на початку пам'яті (за адресою 0) таблицю переривань, що містить адреси обробників переривань, і виконує дві операції INT 11H (запит списку приєднаного обладнання) і INT 12H (запит розміру фізичної пам'яті). Наступним кроком BIOS визначає чи є на чи диску, дискеті операційна система DOS. Якщо виявлена системна дискета, то BIOS виконує переривання INT 19H для доступу до першого сектора диска, що містить блок початкового завантаження. Цей блок являє собою програму, що зчитує системні файли IO.SYS, MSDOS.SYS і COMMAND.COM з диска в пам'ять. Після цього пам'ять має наступний розподіл: Таблиця векторів переривань Дані BIOS IO.SYS і MSDOS.SYS Резидентная частина COMMAND.COM Доступна пам'ять для прикладних програм Транзитна частина COMMAND.COM Кінець RAM (ОЗУ) ROM BASIC ROM BIOS Зовнішні пристрої передають сигнал готовності через контакт INTR у процесор. Процесор реагує на цей запит, якщо прапорець переривання IF встановлений у 1 (переривання дозволене), і (у більшості випадків) ігнорує запит, якщо прапорець IF встановлений у 0 (переривання заборонене). Операнд у команді переривання, наприклад, INT 12H, містить тип переривання, що ідентифікує запит. Для того щоб зв'язати номер переривання з адресою програми реакції на переривання (обробника переривань), використовується таблиця векторів переривань, що займає перший кілобайт оперативної пам'яті - адреси від 0000:0000 до 0000:03FF. Перериванню з номером 0 відповідає адреса 0000:0000, перериванню з номером 1 - 0000:0004 і т.д. Перериванню з номером n буде відповідати адреса 0000:4*n. Таблиця складається з 256 елементів - 4-байтних адрес обробників переривань. Ці елементи називаються векторами переривань. У першому слові елемента таблиці записане зміщення, що при перериванні встановлюються в регістри IP а в другому - сегмент адреси обробника переривань, що при перериванні встановлюються в регістри CS. Ініціалізація таблиці відбувається частково програмою BIOS, частково при завантаженні DOS. DOS може переключити на себе деякі переривання BIOS. Список елементів таблиці векторів переривань приведений нижче. Переривання заносить у стек вміст регістра прапорців FLAGS, регістра CS і регістра IP. Наприклад, для переривання 12H (яке повертає в регістрі AX розмір пам'яті) адреса елемента таблиці дорівнює 0048h ((12 х 4)h = .48h). Операція виділяє чотирибайтний елемент за адресою 0048h і заносить два байти в регістр IP і два байти в регістр CS. Адреса, що отримується у регістровій парі CS:IP, являє собою адресу початку підпрограми в області BIOS, що одержує керування. Повернення з цієї підпрограми здійснюється командою IRET (Interrupt Return), що відновлює регістр прапорців і регістри CS і IP зі стеку і передає керування на команду, що випливає за виконаною командою переривання. Маскування переривань Часто при виконанні критичних ділянок програм, для того щоб гарантувати виконання визначеної послідовності команд, необхідно забороняти переривання. Це можна зробити командою CLI (скидання прапора дозволу переривання). Її потрібно ввести в початок критичної послідовності команд, а наприкінці ввести команду STI (встановити прапор дозволу переривання). Команда CLI забороняє тільки масковані переривання, немасковані - завжди обробляються процесором. Якщо програміст використовує заборону переривань за допомогою команди CLI, необхідно слідкувати за тим, щоб переривання не відключалися на тривалий період часу, оскільки це може призвести до небажаних наслідків, наприклад, відставання системного годинника. Якщо потрібно заборонити лише деякі переривання, наприклад, від клавіатури, для цього треба скористатися послугами контролера переривань. Зміна таблиці векторів переривань Якщо програмі буде потрібно організувати обробку деяких переривань, для цього необхідно перевстановити потрібний вектор переривань на свій обробник змінивши вміст відповідного елемента таблиці векторів переривань. Дуже важливо не забути перед завершенням роботи програми відновити вміст змінених векторів, оскільки після завершення роботи програми пам'ять, що була надана їй системою, вважається вільною і може бути використана для завантаження іншої програми. Якщо вектор не був відновлений і виникло переривання, робота системи може порушитися - вектор тепер вказує на область, що може містити все, що завгодно. Послідовність дій для нерезидентных програм, що обробляють переривання, повинна бути такою: прочитати вміст елемента таблиці векторів переривань для вектора з номером переривання, яке потрібно обробити; зберегти цей вміст (адреса старого обробника переривання) в області даних програми; встановити нову адресу в таблиці векторів переривань так, щоб вона вказувала на початок програми обробки переривання користувача; перед завершенням роботи програми прочитати з області даних адресу старого обробника переривання і записати його в таблицю векторів переривань. * для резидентних програм останній пункт виконувати не потрібно. Операція зміни вектора переривань повинна бути неперервною в тому сенсі, що під час зміни не повинно виникнути переривання з номером, для якого відбувається заміна програми обробки. Для цього перед записом у вектор переривання потрібно заборонити переривання командою CLI, а після запису - дозволити командою STI. Для полегшення операції заміни переривань DOS має спеціальні функції для читання елемента таблиці переривань і для запису в неї нової адреси. Коректність операцій при цьому буде гарантована. Для читання вектора використовуйте функцію 35h DOS (переривання 21h). Перед її викликом регістр AL повинен містити номер вектора в таблиці. Після виконання функції в регістрах ES:BX буде розміщена адреса обробника переривання. Функція 25h DOS встановлює для вектора з номером, що знаходиться в AL, обробник переривань DS:DX. Корекція системних обробників переривань Якщо необхідно додати які-небудь власні дії до тих, що виконує стандартний обробник переривання, можна організувати ланцюжок переривань. Для організації ланцюжка переривань необхідно записати в таблицю векторів адресу власного обробника, попередньо зберігши попереднє значення елементу, що записується. Обробник користувача отримує управління по перериванню, виконує свої дії, потім передає управління стандартному обробнику. В разі необхідності можна вставити додаткову обробку після виклику стандартного обробника. Використання переривань При програмуванні на мові асемблер, переривання найчастіше використовуються для операцій вводу даних з клавіатури та виводу даних на екран. Тому доцільно зупинитися саме на таких перериваннях. Вводити та виводити дані можна по одному символу або рядком символів. Ввід з клавіатури можна здійснювати трьома способами: 1. Використання групи функцій переривання DOS INT 21H, при цьому номер функції цього переривання вказується в регістрі AH: AH=01: Ввід символу з клавіатури з еховідображенням. Дана функція повертає значення в регістрі AL. Якщо вміст AL не дорівнює нулю, то воно являє собою стандартний ASCII- cимвол, наприклад, букву або цифру. Нульове значення в регістрі AL свідчить про те, що на клавіатурі була натиснута спеціальна функціональна клавіша, наприклад, Номе, F1 або PgUp. Для визначення скен-коду клавіш, необхідно повторити виклик функції Дана функція реагує на запит Ctrl/Break. .code mov ax,@data mov ds,ax MOV AH,01H ;Запит функції вводу INT 21H ;Викликати DOS AH=06: Прямий ввід з клавіатури і вивід на екран. AH=07: Прямий ввід із клавіатури без еховідображення. Дана функція працює аналогічно функції 01 із двома відмінностями: введений символ не відображається на екрані, тобто немає еха, і відсутня реакція на запит Ctrl/Break. AH=08: Ввід із клавіатури без еховідображення. Дана функція діє аналогічно функції 01 з однією відмінністю: введений символ не відображається на екрані. AH=0Ah - буферизований ввід стрічки з еховідображенням; Для використання даної функції область вводу вимагає наявності cписку параметрів, що містить поля, які необхідні при виконанні команди INT. По-перше, повинна бути визначена максимальна довжина тексту, що вводить. Це необхідно для попередження користувача звуковим сигналом, якщо набрано занадто довгий текст; символи, що перевищують максимальну довжину не приймаються. По-друге, у списку параметрів повинне бути певне поле, куди команда повертає дійсну довжину уведеного тексту в байтах. Нижче наведений приклад, у якому визначений список параметрів для області вводу. LABEL являє собою директиву з атрибутом BYTE. Перший байт містить максимальну довжину даних, що вводять. Оскільки це однобайтовое поле, те можливе максимальне значення його - FFh або 255. Другий байт необхідний DOS для занесення в нього дійсної кількості введених символів. Третім байтом починається поле, що буде безпосередньо містити введені символи. .data NAMEPAR LABEL BYTE ;Список параметрів: MAXLEN DB 20 ; Максимальна довжина ACTLEN DB ? ; Реальна довжина NAMEFLD DB 20 DUP (' ') ; Уведені символи Оскільки в списку параметрів директива LABEL не займає місця, то NAMEPAR і MAXLEN вказують на однакову aдресу пам’яті. Для запиту на ввіду необхідно помістити в регістр AH номер функції - 10 ( 0AH), завантажити адресу списку параметрів (NAMEPAR у нашому прикладі) у регістр DX і виконати INT 21H: .code mov ax,@data mov ds,ax MOV AH,0AH ;Запит функції вводу LEA DX,NAMEPAR ;Завантажити адреси списку параметрів INT 21H ;Викликати DOS Команда INT очікує поки користувач не введе із клавіатури текст, перевіряючи при цьому, щоб кількість введених символів не перевищувало максимального значення, зазначеного в списку параметрів (20 у нашому прикладі). Для вказівки кінця вводу користувач натискає клавішу Enter. Код цієї клавіші (0Dh) також заноситься в поле вводу (NAMEFLD у нашому прикладі). Якщо, наприклад, користувач ввів ім'я BROWN (Enter), то список параметрів буде містити інформацію: Десяткові та символьні значення 20 5 B R O W N #    шістнадцяткові 14 05 42 52 4F 57 4E 0D 20 20   У другий байт списку параметрів (ACTLEN у нашому прикладі) команда заносить довжину уведеного імені - 05. Код Enter знаходиться за адресою NAMEFLD +5. Символ # використаний тут для індикації кінця даних, тому що 0Dh не має відображуваного символу. Оскільки максимальна довжина в 20 символів включає 0Dh, то дійсна довжина тексту, що вводиться може бути тільки 19 символів. AH=0Bh: Перевірка стану клавіатури. Дана функція повертає FFh у регістрі AL, якщо ввід із клавіатури можливий, у іншому випадку - 00. Цей засіб пов’язане з функціями 01, 07 і 08, які не очікують вводу з клавіатури. AH=0Ch:- скидання вхідного буфера і ввід; 2. Посимвольний ввід шляхом звертання до драйвера BIOS за допомогою переривання INT 16H Команда BIOS INT 16H виконує спеціальну операцію, яка відповідно до коду в регістрі AH забезпечує наступні три функції вводу клавіатури. AH=00: Читання символу. Дана функція поміщає в регістр AL черговий ASCII символ, введений із клавіатури, і встановлює скен код у регістрі AH.. Якщо на клавіатурі натиснута одна з спеціальних клавіш, наприклад, Номе або F1, то в регістр AL заноситься 00. Автоматичного еховідображення символу на екран не відбувається. .code mov ax,@data mov ds,ax MOV AH,00H INT 16h CMP AL,00 JZ exit Даний фрагмент ілюструє можливість вводу символу з клавіатури та перевірку на нажаття функціональної клавіші. AH=01: Визначення наявності введеного символу. Дана функція скидає прапорець нуля (ZF=0), якщо є символ для читання з клавіатури; черговий символ і скен-код будуть поміщені в регістри AL і AH, відповідно і даний елемент залишиться в буфері. AH=02: Визначення поточного стану клавіатури. Дана функція повертає в регістрі AL стан клавіатури з адреси пам’яті 417h: Біт Ознака  7 Стан вставки активний (Ins)  6 Стан фіксації верхнього регістра (Caps Lock) переключено  5 Стан фіксації цифрової клавіатури (Num Lock) переключено  4 Стан фіксації прокручування (Scroll Lock) переключено  3 Натиснута комбінація клавіш Alt/Shift  2 Натиснута комбінація клавіш Ctrl/Shift  1 Натиснута ліва клавіша Shift  0 Натиснута права клавіша Shift   3. Звертання до клавіатури, як до файлу. Це здійснюється шляхом використання функцій 3Fh переривання 21h При цьому у регістр CX заноситься кількість байт для вводу, а в регістр DX - адреса області вводу. У результаті успішного виконання операції вводу очищається прапорець переносу (CF) і в регістр AX встановлюється дійсна кількість байт, що беруть участь в операції. При неуспішній операції встановлюється прапорець CF, а код помилки (в даному випадку 6) заноситься в регістр AX. Оскільки регістр AX може містити як довжину даних, так і код помилки, то єдиний спосіб визначити наявність помилки – перевірити прапорець CF, хоча помилки читання із клавіатури й виводу на екран - не часті. Нижче наведені команди, що ілюструють використання цієї функції вводу. .data INAREA DB 20 DUP (' ') ;Область вводу .code mov ax,@data mov ds,ax MOV AH,3FH ;Запит на ввід MOV BX,00 ;Номер для клавіатури MOV CX,20 ;Максимум байт для вводу LEA DX,INAREA ;Адреса області увводу INT 21H ;Виклик DOS Команда LEA завантажує відносну адресу INAREA в регістр DX. Команда INT очікує, поки користувач не введе символи з клавіатури, але не перевіряє чи перевищує кількість введених символів максимальне значення в регістрі CX (20 в наведеному прикладі). Натискання клавіші Enter (код 0Dh) вказує на завершення вводу. Наприклад, після вводу тексту "PC Users Group" INAREA буде містити: PC Users Group,0Dh, 0Ah. Після введеного тексту безпосередньо слідує символ повороту каретки (0Dh), що був введений, і символ кінця рядка (0Ah), що не був введений. Тому, максимальна кількість символів і розмір області вводу повинні передбачати місце для двох додаткових символів. Якщо буде введено менше символів ніж максимальне значення, то в пам'яті, після введених символів збережуться колишні значення. У результаті успішної операції буде очищений прапорець CF (що можна перевірити) і в регістрі AX буде встановлена кількість байт, введених із клавіатури. У попередньому прикладі це число буде рівним 14 плюс 2, тобто 16. Відповідним чином програма може визначити дійсну кількість введених символів. Така властивість може бути використана для відповідей зі змінною довжиною, наприклад імен. Якщо вводити текст, що перевищує максимальну довжину, встановлену в регістрі CX, то будуть прийматися всі символи. Розглянемо ситуацію, коли регістр CX містить 08,а користувач уведе символи "PC Exchange". У результаті перші вісім символів "PC Excha" потраплять в область вводу без кодів повернення каретки й кінця рядка. У регістрі AX буде встановлена довжина 08. Наступна команда INT буде приймати дані не із клавіатури, а із власного буфера, оскільки там ще залишилися попередні дані. Таким чином, в область вводу будуть прийняті символи "ngе", символ повернення каретки й символ нового рядка, у регістрі AX буде встановлено значення 05. Обидві операції вводу є цілком нормальними і прапорець CF буде очищений. Перший INT: PC Excha AX = 08 Другий INT: ngе,0D,0A AX = 05 Таким чином, програма може визначити факт закінчення вводу тексту, якщо у регістрі AX вийде значення менше, ніж у регістрі CX або якщо вмісти AX і CX рівні, але останні два символи в області вводу - 0Dh і 0Ah. Зауважимо, що вбудовані перевірки, які забезпечуються функцією 0Ah для вводу з клавіатури мають кращі параметри, тому вибір саме її для використання в програмах є кращим. Вивід на екран можна здійснювати двома способами: 1. Використання групи функцій переривання DOS INT 21H, при цьому номер функції цього переривання вказується в регістрі AH: AH=02: Вивід символу. Для виводу символу на екран в поточну позицію курсору необхідно помістити код даного символу в pегістр DL. Коди табуляції, повернення каретки й кінця рядка діють звичайним чином. .code mov ax,@data mov ds,ax mov dl,’A’ MOV AH,02H ;Запит функції виводу INT 21H ;Викликати DOS AH=09 Вивід на екран стрічки в базовій версії DOS. Використання даної функції вимагає визначення текстового повідомлення в області даних, установки в регістрі AH значення 09 (виклик функциии DOS) і виклику переривання INT 21H. У процесі виконання операції кінець повідомлення визначається за ознакою закінчення рядка($), як це показано нижче: .data NAMPRMP DB 'Ім'я покупця?','$' ;Повідомлення, що виводиться .code mov ax,@data mov ds,ax MOV AH,09 ;Запит виводу на екран LEA DX,NAMPRMP ;Завантаження адреси повідомлення ;MOV DX, OFFSETT NAMPRMP INT 21H ;Виклик DOS Знак обмежника “$” можна кодувати безпосередньо після cимвольного рядка (як видно з прикладу), всередині рядка: “Ім'я покупця?$”, або в наступному операторі DB “$”. Використовуючи дану операцію, не можна вивести на екран символ долара “$”. Крім того, якщо знак долара буде відсутній у кінці рядка, то на екран будуть виводитися всі наступні символи, поки знак “$” не зустрітися в пам'яті. Команда LEA завантажує адресу області NAMPRMP у регістр DX для передачі в DOS адреси виведеної інформації. Адреса поля NAMPRMP, що завантажує в DX по команді LEA, є відносною, тому для обчислення абсолютної адреси даних DOS додає значення регістрів DS і DX (DS:DX). Альтернативою може бути використання оператора OFFSETT, який також повертає відносну адресу мітки в середині сегменту даних чи коду. 2. Звертання до пристрою виводу(монітору), як до файлу. Це здійснюється шляхом використання функцій 40h переривання 21h При цьому у регістр CX заноситься кількість байт для виводу, а в регістр DX - адреса області виводу. У результаті успішного виконання операції виводу очищається прапорець переносу (CF) і в регістр AX встановлюється кількість виведених символів. При неуспішній операції встановлюється прапорець CF, а код помилки (в даному випадку 6) заноситься в регістр AX. Оскільки регістр AX може містити як довжину даних, так і код помилки, то єдиний спосіб визначити наявність помилки – перевірити прапорець CF. Нижче наведені команди, що ілюструють використання цієї функції виводу. .data DISAREA DB 20 DUP(' ') ;Область даних .code mov ax,@data mov ds,ax MOV AH,40H ;Запит на вивід MOV BX,01 ;Вивідний пристрій MOV CX,20 ;Максимальна кількість байт LEA DX,DISAREA ;Адреса області даних INT 21H ;Виклик DOS Команда LEA завантажує в регістр DX адресу DISAREA для можливості DOS локалізувати інформацію, призначену для виводу. У результаті успішної операції прапорець переносу очищаєся (це можна перевірити), а в регістрі AX установлюється кількість виведених символів. Помилка в даній операції може відбутися, якщо встановлений неправильний файловий номер. В цьому випадку буде встановлений прапорець CF і код помилки (у даному випадку 6) у регістрі AX. Оскільки регістр AX може містити або довжину, або код помилки, то єдиний спосіб визначити стан помилки - перевірити CF. Найбільш важливі переривання BIOS INT 05h Друк екрану. Виконує вивід вмісту екрану на друкувальний пристрій. Команда INT 05H виконує дану операцію з програми, а натискання клавішею Ctrl/PrtSc - із клавіатури. Операція забороняє переривання і зберігає позицію курсору. INT 10h Керування дисплеєм. Забезпечує екранні і клавіатурні операції INT 11h Запит списку приєднаного пристроїв. Визначає наявність різних пристроїв у системі, остаточне значення повертає в регістрі AX. При включенні комп'ютера система виконує цю операцію і зберігає вміст AX у пам'яті за адресою 0410h. Значення бітів у регістрі AX: Біт Пристрій   15,14 Кількість підключених принтерів   13 Послідовний принтер   12 Ігровий адаптер   11-9 Кількість послідовних адаптерів стику RS232   7,6 Кількість дисководів, при біті 0=1: 00=1, 01=2, 10=3 і 11=4   5,4 Початковий відео режим 00 = не використовується 01 = 40х25 плюс колір 10 = 80х25 плюс колір 11 = 80х25 чорно-білий режим   1 :Значення 1 говорить про наявність співпроцесора   0 Значення 1 говорить про наявність одного чи більше дискових пристроїв і завантаження операційної системи повинне здійснюватися з диска   INT 12h Запит розміру фізичної пам'яті. Повертає в регістрі AX розмір пам'яті в кілобайтах, наприклад, 200h відповідає пам'яті 512 К. Дана операція корисна для вирівнювання розміру програми відповідно до доступної пам'яті. INT 13h Дискові операції вводу-виводу. Забезпечує операції вводу-виводу для дискет і вінчестера. INT 14h Керування комунікаційним адаптером. Забезпечує послідовний уведення-висновок через комунікаційний порт RS232. Регістр DX повинний містити номер (0 чи 1) адаптера стику RS232. Чотири типи операції, обумовлені регістром AH, виконують прийом і передачу символів і повертають у регістрі AX байт стану комунікаційного порту. INT 15h Касетні операції введення-висновку і спеціальні функції для комп'ютерів AT. Забезпечує операції вводу-виводу для касетного магнітофона, а також розширені операції для комп'ютерів AT. INT 16h Ввід з клавіатури. Забезпечує три типи команд вводу з клавіатури. INT 17h Вивід на принтер. Забезпечує вивід даних на друкуючий пристрій. INT 18h Звертання до BASIC, вбудованому в ROM. Викликає BASIC-інтерпретатор, що знаходиться в постійній пам'яті ROM. INT 19h Перезапуск системи. Дана операція при доступному диску зчитує сектор 1 з доріжки 0 в область початкового завантаження в пам'яті (сегмент 0, зсув 7C00) і передає керування по цій адресі. Якщо дисковод не доступний, то операція передає керування через INT 18H у ROM BASIC. Дана операція не очищає екран і не ініціалізує дані в ROM BASIC, тому її можна використовувати з програми. INT 1Ah Запит і установка поточного часу і дати. Зчитує і записує покази годин у відповідності зі значенням у регістрі AH. Для визначення тривалості виконання програми можна перед початком виконання встановити годинник у 0, а далі рахувати поточний час. Відлік часу йде приблизно 18,2 рази в секунду. Значення в регістрі AH відповідає наступним операціям: AH=00 Запит часу. У регістрі CX установлюється стара шая частина значення, а в регістрі DX - молодша. Якщо після останнього запиту пройшло 24 години, то в регістрі AL буде не нульове значення  AH=01 Установка часу. Час установлюється по регист рам CX (старша частина значення) і DX (молодша частина значення).  Коди 02 і 06 керують часом і датою для AT.   INT 1Fh Адреса таблиці графічних символів. У графічному режимі можливий доступ до символів з кодами 128-255 у 1К таблиці, що містить по восьми байт на кожен символ. Прямий доступ у графічному режимі забезпечується тільки до перших 128 ASCII-символів (від 0 до 127). Найбільш важливі переривання DOS Під час своєї роботи BIOS використовує два модулі DOS: IO.SYS і MSDOS.SYS. Оскільки модулі DOS забезпечують велику кількість різних додаткових перевірок, то операції DOS, як правило простіші у використанні і менш машинно залежні, аніж їх BIOS аналоги. Модуль IO.SYS забезпечує інтерфейс із BIOS низького рівня. Ця програма виконує керування вводом-виводом при читанні даних із зовнішніх пристроїв у пам'ять і записі з пам'яті на зовнішні пристрої. Модуль MSDOS.SYS містить засоби керування файлами і ряд сервісних функцій, таких як блокування і деблокування записів. Коли користувацька програма видає запит INT 21H, то в програму MSDOS.SYS через регістри передається визначена інформація. Потім програма MSDOS.SYS транслює цю інформацію в один чи кілька викликів IO.SYS , що у свою чергу викликає BIOS. Зазначені зв'язки приведені на наступній схемі:  Як показано вище, переривання від 20h 62h зарезервовані для операцій DOS. Нижче приведені найбільш основні з них: INT 20h Завершення програми. Запит завершує виконання програми і передає керування в DOS. Даний запит звичайно знаходиться в основній процедурі. INT 21h Запит функцій DOS. Основна операція DOS, що викликає визначену функцію відповідно до коду в регістрі AH. INT 22h Адреса підпрограми обробки завершення задачі. (см.INT 24H). INT 23h Адреса підпрограми реакції на Ctrl/Break. (см.INT 24H). INT 24h Адреса підпрограми реакції на фатальну помилку. У цьому елементі й у двох попередніх містяться адреси, що ініціалізуються системою в префіксі програмного сегмента і, які можна змінити для своїх цілей. INT 27h Завершення програми, що залишає її резидентною. Дозволяє зберегти COM-програму в пам'яті. Таблиця векторів переривань Адр.(16) Номер Опис  0-3 0 Помилка ділення. Викликається автоматично після виконання команд DIV або IDIV, якщо в результаті ділення відбулося переповнення. DOS зазвичай при обробці цього переривання виводить повідомлення про помилку й зупиняє виконання програми. Для процесора 8086 при цьому адреса повернення вказує на наступну після команди ділення команду, а в процесорі 80286 - на перший байт команди, що викликала переривання  4-7 1 Переривання покрокового режиму. Виникає після виконання кожної машинної команди, якщо в слові прапорів встановлений біт покрокового трасування TF. Використовується для наладки програм. Переривання не виникає після виконання команди MOV у сегментні регістри або після завантаження сегментних регістрів командою POP  8-B 2 Апаратне немасковане переривання. Це переривання може використовуватися по-різному в різних машинах. Звичайно виникає при помилці парності в оперативній пам'яті і при запиті переривань від сопроцесора  C-F 3 Переривання для трасування. Це переривання генерується при виконанні однобайтової команди з кодом CCh і звичайно використовується наладчиками для встановлення точки переривання  10-13 4 Переповнення. Генерується машинною командою INTO, якщо встановлений прапор OF. Якщо прапор не встановлений, то команда INTO виконується як NOP. Це переривання використовується для обробки помилок при виконанні арифметичних операцій  14-17 5 Друк копії екрана. Генерується при натисканні на клавіатурі клавіші PrtScr. Звичайно використовується для друку образу екрана. Для процесора 80286 генерується при виконанні машинної команди BOUND, якщо значення, що перевіряється, вийшло за межі заданого діапазону  18-1С 6 Невизначений код операції або довжина команди більше 10 байтів (для процесора 80286)  1D-1F 7 Особливий випадок відсутності сопроцессора  20-23 8 IRQ0 - переривання інтервального таймера, виникає 18,2 разів в секунду  24-27 9 IRQ1 - переривання від клавіатури. Генерується при натисканні і при відпусканні клавіші. Використовується для читання даних з клавіатури  28-2B A IRQ2 - використовується для каскадування апаратних переривань у машинах класу AT  2C-2F B IRQ3 - переривання асинхронного порту COM2  30-33 C IRQ4 - переривання асинхронного порту COM1  34-37 D IRQ5 - переривання від контролера жорсткого диска для XT  38-3B E IRQ6 - переривання генерується контролером флоппі-диска після завершення операції  3C-3F F IRQ7 - переривання принтера. Генерується принтером, коли він готовий до виконання чергової операції. Багато адаптерів принтера не використовують це переривання  40-43 10 Обслуговування відеоадаптера  44-47 11 Визначення конфігурації пристроїв у системі  48-4B 12 Визначення розміру оперативної пам'яті в системі  4C-4F 13 Обслуговування дискової системи  50-53 14 Послідовний ввід/вивід  54-57 15 Розширений сервіс для AT-комп'ютерів  58-5B 16 Обслуговування клавіатури  5C-5F 17 Обслуговування принтера  60-63 18 Запуск BASIC у ПЗУ, якщо він є  64-67 19 Завантаження операційної системи  68-6B 1A Обслуговування годинника  6C-6F 1B Обробник переривань Ctrl-Break  70-73 1C Переривання виникає 18,2 разів в секунду, викликається програмно обробником переривання таймера  74-77 1D Адреса відеотаблиці для контролера відеоадаптера 6845  78-7B 1E Покажчик на таблицю параметрів дискети  7C-7F 1F Покажчик на графічну таблицю для символів із кодами ASCII 128-255  80-83 20 Нормальне завершення програми (DOS)  84-87 21 Звертання до функцій DOS  88-8B 22 Адреса обробки завершення задачі (DOS)  8C-8F 23 Адреса реакції по Ctrl/Break (DOS)  90-93 24 Адреса реакції на фатальну помилку (DOS)  94-97 25 Абсолютне читання з диска (DOS)  98-9B 26 Абсолютний запис на диск (DOS)  9C-9F 27 Створення резидентної програми (DOS)  A0-17F 28-5F Інші функції DOS  180-19F 60-67 Переривання, зарезервовані для користувача  1A0-1A3 68-6F Не використовуються  1C0-1C3 70 IRQ8 - переривання від годинника реального часу  1C4-1C7 71 IRQ9 - переривання від контролера EGA  1C8-1CB 72 IRQ10 – зарезервовано  1CC-1CF 73 IRQ11 – зарезервовано  1D0-1D3 74 IRQ12 – зарезервовано  1D4-1D7 75 IRQ13 - переривання від сопроцесора  1D8-1DB 76 IRQ14 - переривання від контролера жорсткого диска  1DC-1DF 77 IRQ15 – зарезервовано  1E0-1FF 78-7F Не використовуються  200-217 80-85 Зарезервовані для BASIC  218-3C3 86-F0 Використовуються інтерпретатором BASIC  3C4-3FF F1-FF Не використовуються  
Антиботан аватар за замовчуванням

29.05.2014 22:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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