
- •Системне програмування
- •Переривання (Системні виклики). Механізм і типи переривань
- •Обслуговування переривань
- •Io.Sys і msdos.Sys
- •Маскування переривань
- •Зміна таблиці векторів переривань
- •Корекція системних обробників переривань
- •Використання переривань
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Посимвольний ввід шляхом звертання до драйвера bios за допомогою переривання int 16h
- •Int 16h
- •3. Звертання до клавіатури, як до файлу.
- •1. Використання групи функцій переривання dos int 21h, при цьому номер функції цього переривання вказується в регістрі ah:
- •2. Звертання до пристрою виводу(монітору), як до файлу.
- •Найбільш важливі переривання bios
- •Найбільш важливі переривання dos
- •Таблиця векторів переривань
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.