Сложные структуры данных. Перечислимые типы данных. Прерывания пользователя, страница 6

Номер прерывания

Операция

Номер прерывания

Операция

00H

Деление на ноль

14H

Прерывание сериального порта

01H

Пошаговое выполнение

16H

Ввод с клавиатуры

02H

Немаскируемое прерывание

17H

Вывод на принтер

03H

Точка останова

19H

Чтение boot-сектора

04H

Переполнение

1AH

Чтение и установка таймера

05H

Печать экрана

1BH

Контроль прерывания от клавиатуры

08H

Системный таймер

1CH

Контроль прерывания от таймера

09H

Прерывание клавиатуры

1DH

Таблица видео адресов

0EH

Контроль дискеты

1EH

Таблица дисковых адресов

10H

Видео прерывание

1FH

Адреса ASCII символов

11H

Проверка оборудования

21H

Прерывание DOS

12H

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

33H

Прерывание мышки

13H

Ввод/вывод на диск

Часть векторов свободна (вектора с номерами 60h÷66h) и может быть использована в прикладных программах пользователем. Необходимо только позаботиться о том, чтобы адрес программы пользователя, предназначенной для обработки прерывания, попал в соответствующий вектор прерывания. Для этого можно воспользоваться функцией номер25h операционной системы DOS. Этой функции должны быть переданы следующие параметры: в регистре AL – номер модифицируемого вектора прерывания, в регистрах DS:DX – адресная пара точки входа в программу обработки прерывания.

Заканчиваться программа обработки прерывания должна заканчиваться восстановлением сохраненного состояния регистра флагов и возвратом в точку вызова программы обработки прерывания. Осуществить эти действия можно специальной командой iret, которой должна оканчиваться программа обработки прерывания.

Пример.

.model small

.stack 256

.data

line             db     1

coloumn    db     10

sym            db     01h

atrb            db     19h

.code

new_65h   proc

mov  ah,6                     ; Функция задания окна

mov  al,0                      ; Режим создания окна

mov  bh,atrb                ; Атрибут символов в окне

mov  cx,0                     ; Левый верхний угол

mov  dh,24                   ; Нижний правый угол

mov  dl,79

int     10h                      ; Прерывание BIOS

iret                                 ; Возврат из обработки прерывания

new_65h   endp

main proc

mov  ax,@data

mov  ds,ax

mov  ax,2565h            ; Функция заполнения вектора ;прерывания 65

lea    dx,new_65h        ; Смещение функции обработки ;прерывания

push ds

push cs

pop   ds                        ; Сегмент функции обработки пре;рывания

int     21h                      ; Вызов DOS

pop   ds                        ; Восстановление индекса сегмента

; данных

m1:   int     65h                      ; Вызов прерывания пользователя

mov  ah,2                     ; Функция позиционирования курсора

mov  bh,0                     ; Видеостраница

mov  dh,line                 ; Строка

mov  dl,coloumn          ; Столбец

int     10h                      ; Прерывание BIOS

mov  ah,0ah                ; Функция вывода символа

mov  al,sym                 ; Символ

mov  bh,0                     ; Видеостраница

mov  cx,60                   ; Количество повторений

int     10h  

inc    sym

inc    atrb

inc    line

cmp  line,23

jl        m2

mov  ah,1

mov  line,ah

m2:   mov  ah,8                     ; Функция ввода символа без эха

int     21h                      ; воспринимает Ctrl/c

jmp   m1

main endp

end   main