- •Лекции 19-20
- •Понятие прерывания
- •Аппаратное прерывание
- •Аппаратное прерывание
- •Аппаратные прерывания
- •Номера IRQ аппаратных
- •Исключения
- •Программное прерывание
- •Программное окружение прерываний
- •Таблица прерываний
- •Прерывание 10h (Видео
- •Прерывание 16h (клавиатура)
- •Прерывание 21h (сервис DOS)
- •Функции консольного вывода
- •Функции консольного ввода
- •Функции файлового ввода -
- •Функции файлового ввода - вывода
- •Функции работы с памятью
- •Пример
- •Пример
- •Пример
- •;------ Cycle for read & write -----------
- •next4:
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Перехват прерываний
- •Создание собственных обработчиков прерываний
- •Создание собственных обработчиков прерываний
- •Создание собственных обработчиков прерываний
- •Пример 1
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
- •Пример использования
- •Пример 2
- •Обработчик (код обработки - продолжение)
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
- •Пример 3
- •Обработчик (начало инсталятора)
- •Обработчик (вывод сообщения о наличии
- •Обработчик (инсталляция)
Прерывание 10h (Видео
BIOS)
Функция 00h – Установка видеорежима AL – номер видеорежима
Функция 01h – Установка размера и формы курсора CH – начальная строка (CH=20h – подавить)
CL – конечная строка.
Функция 02h – Установить позицию курсора BH – видеостраница
DH, DL – строка, колонка (начиная с 0).
Функция 03h – Читать позицию и размер курсора BH – видеостраница,
DH, DL – текущие строка, колонка курсора
CH, CL – текущая начальная и конечные строки курсора
Функция 05h – Выбрать текущую видеостраницу AL – номер страницы
Прерывание 16h (клавиатура)
Функция 00h – Читать следующую нажатую клавишу Выход:
AH – Сканкод (или расширенный код ASCII,) AL – ASCII символ
Функция 01h – Проверить готовность символа (и показать его если так). Выход:
ZF=1 – символ не готов ZF=0 – символ готов
Функция 02h – Читать состояние shift-клавиш.
Выход: AL – статус клавиатуры: |
|
|
||
|
bit 0 |
– правый Shift |
bit 4 |
– режим ScrollLock |
|
bit 1 |
– левый Shift |
bit 5 |
– режим NumLock |
|
bit 2 |
– Ctrl |
bit 6 |
– режим CapsLock |
|
bit 3 |
– Alt |
bit 7 |
– режим Insert |
|
|
|
|
|
Прерывание 21h (сервис DOS)
Вданном прерывании реализованы большинство сервисных функций, предоставляемых операционной системой MS DOS прикладным программам.
Здесь содержатся функции:
Консольного ввода – вывода информации.
Файлового ввода и вывода.
Работы с динамической памятью.
Работы с датой и временем.
и др.
Функции консольного вывода
Регистр |
Операция |
Дополнительные |
||
|
AH |
|
входные регистры |
|
|
|
|
или данные |
|
2h |
Вывод символа с проверкой на |
DL – ASCII код |
||
|
|
Crtl-Break |
символа |
|
|
|
|
||
6h |
Вывод символа без проверки на |
DL – ASCII код |
||
|
|
Crtl-Break |
символа |
|
|
|
|
||
9h |
Вывод строки символов с |
DS:DX – указатель на |
||
|
|
проверкой на Ctrl-Break |
строку. Символ |
|
|
|
|
окончания строки: ‘$’ |
|
|
|
|
|
|
Функции консольного ввода
Регистр |
Операция |
Дополнительные |
Выходные |
||
|
AH |
|
входные регистры или |
регистры или |
|
|
|
|
данные |
данные |
|
1h |
Ввод символа с эхом и |
|
AL – ASCII код |
||
|
|
проверкой Ctrl-Break |
|
символа |
|
|
|
|
|
||
7h |
Ввод символа без эха |
|
AL – ASCII код |
||
|
|
и без проверки Ctrl- |
|
символа |
|
|
|
Break |
|
|
|
8h |
Ввод символа без эха |
|
AL – ASCII код |
||
|
|
но с проверкой Ctrl- |
|
символа |
|
|
|
Break |
|
|
|
Ah |
Ввод строки |
DS:DX – адрес буфера, |
Второй байт – |
||
|
|
|
первый байт буфера – |
фактическая |
|
|
|
|
длина буфера |
длина буфера |
|
|
|
|
|
|
|
Функции файлового ввода -
|
вывода |
|
Входные данные |
|
Выходные данные |
|
||
|
|
|
|
|||||
Регистр |
Операция |
|
|
|
||||
|
AH |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
3ch |
Создать файл |
|
DS:DX – имя файла ASCIIZ |
|
AX – дескриптор |
|
||
|
|
|
|
CX – атрибут файла |
|
открытого файла. |
|
|
|
|
|
|
|
|
Если CF установлен, то |
|
|
5bh |
Создать новый файл, файл |
|
DS:DX – имя файла ASCIIZ |
|
в AX – код ошибки |
|
||
|
|
|
|
|
||||
|
|
не должен существовать |
|
CX – атрибут файла |
|
|
|
|
|
|
|
|
|
|
|
|
|
3dh |
Открыть файл |
|
DS:DX – имя файла ASCIIZ |
|
|
|
|
|
|
|
|
|
AL – режим открытия: 0 – |
|
|
|
|
|
|
|
|
только чтение, 1 – только |
|
|
|
|
|
|
|
|
запись, 2 – и чтение и запись |
|
|
|
|
|
|
|
|
|
|
|
||
3eh |
Закрыть файл |
|
BX – дескриптор файла |
|
AX – код ошибки, если |
|
||
|
|
|
|
|
|
CF установлен |
|
|
|
|
|
|
|
|
|
||
41h |
Удалить файл |
|
DS:DX – имя файла ASCIIZ |
|
AX – код ошибки, если |
|
||
|
|
|
|
|
|
CF установлен |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функции файлового ввода - вывода
Регистр |
Операция |
Входные данные |
Выходные данные |
|||
|
AH |
|
|
|
|
|
|
|
|
|
|
|
|
42h |
Установить |
BX – дескриптор файла |
AX – код ошибки, если CF |
|||
|
|
указатель |
CX:DX – новое смещение |
установлен |
||
|
|
|
AL: 0 от начала файла, 1 от |
DX:AX – новая позиция, |
||
|
|
|
текущей позиции, 2 от конца |
если все нормально |
||
|
|
|
файла |
|
|
|
|
|
|
|
|
|
|
3fh |
Читать из файла |
BX – дескриптор файла |
AX – код ошибки, если CF |
|||
|
|
|
DS:DX – адрес буфера |
установлен, или |
||
|
|
|
CX – количество байт |
фактическое число байт |
||
40h |
Записывать в |
|||||
|
|
|||||
|
|
файл |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Функции работы с памятью
Регистр |
Операция |
Входные данные |
Выходные данные |
||
|
AH |
|
|
|
|
|
|
|
|
||
48h |
Выделить блок |
BX – количество |
AX – сегментный адрес |
||
|
|
памяти |
параграфов |
выделенного блока, или код |
|
|
|
|
|
ошибки, если CF=1 |
|
|
|
|
|
BX – количество свободных |
|
|
|
|
|
параграфов |
|
49h |
Освободить блок |
ES – сегментный адрес |
AX –код ошибки, если CF=1 |
||
|
|
памяти |
освобождаемой памяти |
|
|
|
|
|
|
||
4ah |
Сжать или |
ES – сегментный адрес |
AX –код ошибки, если CF=1 |
||
|
|
расширить блок |
изменяемого блока |
BX – количество свободных |
|
|
|
памяти |
BX – количество |
параграфов |
|
|
|
|
параграфов |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Пример
Написать программу копирования файла. Программа запрашивает ввод имен исходного и целевого файлов. Осуществляет копирование данных из исходного файла в целевой файл.
Пример
.486
model small
Data SEGMENT use16 ASSUME ds: Data
mess1 |
db |
'Source file name: ','$' |
mess2 |
db |
0dh, 0ah, 'Destination file name: ','$' |
mess3 |
db |
0dh, 0ah, 'Error open source file!$' |
mess4 |
db |
0dh, 0ah, 'Error create destination file!$' |
mess5 |
db |
0dh, 0ah, 'Read file error!$' |
mess6 |
db |
0dh, 0ah, 'Write file error!$' |
file1 |
db |
100, 100 dup(0) |
file2 |
db |
100, 100 dup(0) |
hand1 |
dw |
0 |
hand2 |
dw |
0 |
buff |
db |
512 dup(?) |
Data ENDS