                                                            ПРИЛОЖЕНИЕ 1

                       ПРЕРЫВАНИЯ MS DOS

     Прерывание - это сигнал от программного обеспечения или аппаратуры,
который позволяет центральному процессору переключаться между заданиями.
При отсутствии прерываний центральный процессор должен бы был непрерывно
отслеживать состояние того или иного внешнего устройства. В первом приб-
лижении прерывание можно представлять как выполнение команды безусловно-
го  перехода  на  определенную  ячейку памяти при возникновении того или
иного сигнала с внешнего устройства или от программы.

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

    Следует отметить, что в строгом смысле этого слова прерыванием можно
называть только те,  которые ведут к приостановке действия текущей прог-
рамммы и выполнению каких-то дополнительных действий. Для микропроцессо-
ра 8086/286/386 такими "строгими" прерываниями являются только некоторые
из описываемых ниже прерываний.

    В MS DOS функции по управлению процессами и файловой системой  также
привязаны к определенным прерываниям,  однако не являются прерываниями в
строгом смысле этого слова.  По сути они являются  функциями  -  точками
входа  в  модуль  BIOS  или MS DOS реализующий соответствующую операцию.
Использование прикладной программой той или иной функции  удобно  выпол-
нять, используя обращение к соответствующему прерыванию, поскольку отпа-
дает необходимость знать адрес начала модуля,  реализующего эту функцию.
Поэтому  прерывания  можно  условно разделить на три группы:  Собственно
прерывания, сервис и указатели:

Прерывания              Сервис                        Указатели
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
 INT 00H Деление на 0    INT 10H Видео сервис          INT 1dH Видео параметры
 INT 01H Пошаговое       INT 11H Список оборудования   INT 1eH Параметры дискет
 INT 02H Немаскируемое   INT 12H Размер исп.памяти     INT 1fH Символы графики
 INT 03H Точка прерыв.   INT 13H Дисковый в/в
 INT 04H Переполнение    INT 14H В/в через последовательный порт
 INT 05H Печать экрана   INT 15H Расшир.сервис AT      INT 41H параметры
 INT 06H (резерв)        INT 16H В/в клавиатуры                первого винчестера
 INT 07H (резерв)        INT 17H В/в принтера          INT 46H параметры второго
 INT 08H Таймер          INT 18H ROM-BASIC                     винчестера
 INT 09H Клавиатура      INT 19H Загрузка              INT 44H граф. симв. EGA
 INT 0aH-0dH (hdwr ints) INT 1aH В/в таймера           INT 4aH user alarm addr
 INT 0eH Дискета         INT 1bH Прерывание клавиатуры INT 50H CMOS timer int
 INT 0fH (hdwr int)      INT 1cH Пользовательское прерывание по таймеру
                         INT 20H-2fH Прерывания MS DOS


    В микропроцессоре 8086/8088 предусмотрено 256 различных типов преры-
ваний.  Команда  INT данного микропроцессора имеет однобайтовое поле,  в
котором записывается номер прерывания.  Например, команда INT 21 обеспе-
чивает обращение к 21 прерыванию (здесь и далее номера прерываний приво-
дятся в 16-ричной системе счисления, 21h = 33d). Поскольку вместо адреса
в команде INT указывается тип прерывания (номер), то имеется специальная
таблица прерываний,  ставящая в соответствие каждому  номеру  прерывания
адрес   подпрограммы   обработки  этого  прерывания.  В  микропроцессоре
8086/286/386 для этой цели отводятся нижние 1024 байта  памяти  -  по  4
байта  на каждое прерывание.  В процессе интерпретации команды процессор
запоминает состояние флажков в стеке (специальной области памяти,  орга-
низованной по принципу первым пришел - первым ушел), умножает номер пре-
рывания на 4, считывает соответствующий элемент таблицы прерываний и вы-
полняет переход по содержащемуся в нем адресу.  Когда подпрограмма обра-
ботки прерывания отработает,  она с помощью специальной команды  восста-
навливает значения флажков из стека, загружает в соответствующие регист-
ры адрес команды,  следующей за точкой прерывания, и возвращает управле-
ние по этому адресу.

    Очевидно, что  заменив  адрес в таблице прерываний,  можно тем самым
заменить обработчик прерываний на свой собственный. Эта операция и назы-
вается  перехватом  прерывания.  В  приводимой  ниже таблицы перечислены
основные прерывания с некоторыми пояснениями. Для экономии места поясне-
ния вставлены "в разрыв" таблицы. При составлении таблицы были использо-
ваны материалы  из  электронного  справочника  TECHHELP  Дана  Роллингса
(D.Rollings).  Изложение  ориентировано на облегчение разбора протоколов
трассировки и листингов дизассемблирования программистам,  не работающим
на ассемблере.

                                                                Таблица
 ┌──┬───┬──┬──────────┬──────────────┬──────────────────────────────────┐
 │П │   │В │          │              │                                  │
 │р │   │е │          │              │                                  │
 │е │   │р │          │              │                                  │
 │р │AH │с.│   Тип    │  Английская  │         Перевод                  │
 │ы │   │D │прерывания│  мнемоника   │                                  │
 │в.│   │O │          │              │                                  │
 │  │   │C │          │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │00│ - │- │ Aппарат.,│ Divide error │      переполнение при делении    │
 │  │   │  │ прерыв.  │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
    Возникает после  выполнения команд деления (DIV или IDIV),  если ре-
зультат операции деления (частное) не умещается  в  поле  результата,  в
частности при делении на 0.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │01│ - │- │ Aппарат.,│ Single-step  │ пошаговое выполнение программы   │
 │  │   │  │ прерыв.  │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Если установлен флаг трассировки процессора  (TF=1),  CPU  вызывает
это прерывание после каждой команды. Некоторые вирусы используют пошаго-
вое выполнение программы,  используют это прерывание,  чтобы  определить
адрес прерываний и обойти резидентные средства защиты.  Трассировка отк-
лючается (TF=0) при выполнении любой команды INT,  так что само INT  01H
выполняется не в пошаговом режиме.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │02│ - │- │ Aппарат.,│    NMI       │ Non-maskable interrupt           │
 │  │   │  │ прерыв.  │              │ (немаскируемое прерывание).      │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Немаскируемое прерывание (NMI) - это  единственное  прерывание,  не
запрещаемое  командой CLI.  Поэтому его можно использовать в специальных
случаях, которые требуют немедленного действия. Это прерывание спроекти-
ровано для обработки катастрофических ситуаций,  таких как сбой питания.
В системе, обеспечивающей целостность данных, NMI может, например, выво-
дить образ памяти на диск с целью избежать потери данных.  В стандартной
системе PC BIOS, NMI аппаратно вызывается в случае "ошибки четности" па-
мяти. Когда это происходит, PC зависает.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │03│ - │- │ Указатель│    1-Byte    │ Прерывание по заданному          │
 │  │   │  │          │   interrupt  │ байту                            │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Вектор прерывания INT 03H используется отладчиками,  чтобы перехва-
тывать  управление,  когда  программа достигает указанного пользователем
адреса.  Код операции для INT 03H занимает один байт (CCh),  так что  им
можно временно замещать начало любой команды,  не боясь затереть следую-
щую команду.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │04│ - │- │ Aппарат. │   Overflow   │ Прерывание по переполнению       │
 │  │   │  │ прерыв.  │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

    Вектор INT 04H может использоваться как один из способов оптимизации
программ,  содержащих большое число  арифметических  операций.  Выданная
после любой арифметической операции,  команда INTO осуществляет проверку
на  арифметическое  переполнение,  и,  если  флаг  переполнения  взведен
(OF=1), вызывает прерывание INT 04H.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │05│ - │- │ Пользов. │ Print-screen │ Печать экрана  (нажатие          │
 │  │   │  │ прерыв.  │              │ клавиши PrtScr)                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Это прерывание  вызывается  обработчиком  прерывания  INT  09H  при
распознавании клавиши PrtSc.  Оно может также вызываться из программы (в
частности,  вируса).  Пересылает содержимое экрана активного дисплея  на
принтер,  если принтер свободен и находится в со стоянии "ГОТОВ". Опера-
ция может быть прекращена по Control-Break


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │08│   │  │Aппарат.  │TIMER TICKS   │ Прерывание от таймера            │
 │  │   │  │(8259-1,  │              │                                  │
 │  │   │  │IRQ 0),   │              │                                  │
 │  │   │  │прерыв.   │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Прерывание от основного таймера,  контролирующие системные часы  и
другие системные ресурсы.  Возникает каждые каждые 55мс,  или около 18.2
раз в секунду.  Имеет наивысший среди маскируемых прерываний  приоритет.
Данное  прерывание является системным и его главная функция - увеличение
значения 32 битового счетчика системных часов. Кроме того это прерывание
выключает мотор флоппи диска,  если он не используется в течении 2-х се-
кунд. Имеется аналогичное пользовательское прерывание 1C (см. ниже).

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │09│ - │- │Aппарат.  │KEYBOARD I/O  │ Прерывание от клавиатуры         │
 │  │   │  │(8259-1,  │              │                                  │
 │  │   │  │IRQ 1),   │              │                                  │
 │  │   │  │прерыв.   │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Возникает при  нажатии  клавиши клавиатуры или их комбинации.  За-
носит скан-код клавиши в буфер клавиатуры. При переполнении буфера выда-
ет на динамик звуковой характерный звуковой сигнал. Некоторые комбинации
нажатий клавиш вызывают специальные действия: Ctrl-Alt_Del - перезагруз-
ка компьютера путем прехода на по адресу; Print screen - рассмотрено вы-
ше Ctrl-Break - вызывает прерывание1B;  Pause -  переводит  программу  в
состояние  ожидания  до  нажатия следующей клавиши отслеживает состояние
клавиш Shift и различных Lock. Резидентные программы, которые имеют кла-
вишу (или комбинацию клавиш) для вызова,  перехватывают INT 09H и прове-
ряют на определенный ключ.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │  │   │  │          │              │                                  │
 │0E│ - │- │Aппарат.  │FLOPPY DISK   │Прерывание от дискеты             │
 │  │   │  │(8259-1,  │CONTROLLER    │                                  │
 │  │   │  │IRQ 6),   │              │                                  │
 │  │   │  │прерыв.   │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Аппаратно генерируемое прерывание (IRQ 6),  вызываемое контроллером
флоппи-дисков, используется прерыванием 13H

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │10│fun│- │ сервис   │VIDEO DISPLAY │ VIDEO                            │
 │  │   │  │ BIOS     │  SERVICES    │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Типичное "пользовательское" прерывание, имеющее подфункции, задава-
емые в регистре AH:

AH  Сервис                              AH  Сервис
▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
00H уст. видео режим                    0aH писать символ
01H уст. размер и форму курсора         0bH выбрать палитру/цвет бордюра
02H уст. позицию курсора                0cH писать графическую точку
03H читать позицию курсора              0dH читать графическую точку
04H читать световое перо                0eH писать символ в режиме TTY
05H выбрать активную страницу дисплея   0fH читать видео режим
06H листать окно вверх (или очистить)   10H EGA:уст. палитру
07H листать окно вниз                   11H EGA:генератор символов
08H читать символ/атрибут               12H EGA:специальные функции
09H писать символ/атрибут               13H писать строку (только AT + EGA)


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │  │   │  │          │              │                                  │
 │12│-- │- │ сервис   │   SYSTEM     │Размер используемой памяти        │
 │  │   │  │ BIOS     │ MEMORY SIZE  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Возвращает размер  системной  памяти в килобайтах в регистре AX Это
значение совпадает с тем,  которое которое хранится в ячейке 0:413  (см.
карту оперативной памяти а прил.3).  Для PC/XT определяется во время на-
чальной загрузки (POST).  Для AT - из CMOS-памяти. Возвращаемое значение
содержит PSP любой программы.


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │13│fun│- │ сервис   │    DISK      │ Дисковый ввод-вывод              │                                                                    Reset disk system
 │  │   │  │ BIOS     │  SERVICES    │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

    Этот сервис  предоставляет  прямой доступ к адаптерам дискеты и вин-
честра.  Имеет ряд подфункций ( подфункции > 8 - только для  винчестера)
00h  сброс контроллера 08h дать парам.диска 10h проверить готовность 01h
дать статус 09h иниц табл.парам 11h рекалибрация 02h читать секторы  0Ah
длинное чтение 14h диагностика 03h писать секторы 0Bh длинная запись 15h
дать тип диска 04h верификация 0Ch искать цилиндр  16h  изменить  статус
05h форматир дорожку 0Dh альтерн.сброс 17h уст.тип диска

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │14│fun│- │ сервис   │ RS-232 SERIAL│ Ввод-вывод через                 │
 │  │   │  │ BIOS     │PORTS SERVICES│  последовательный порт           │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Эти функции BIOS предоставляют доступ к двум портам RS-232. Начиная
с 0:0400, хранятся базовые адреса до 4-х последовательных портов, однако
POST проверяет и инициализирует лишь два первых порта.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │15│fun│AT│ сервис   │   GENERAL    │ Расширенный сервис для AT        │
 │  │   │  │ BIOS     │  SERVICES    │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
     Прерывание 15h обрабатывает специфические функции AT:
     80h Device Open        86h Wait
     81h Device Close       87h Move Extended Mem Block
     82h Program terminate  88h Get Extended Mem Size
     83h Event wait         89h Switch to Virtual Mode
     84h Joystick           90h Device Busy Loop
     85h SysReq key         91h Finish Interrupt


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │16│fun│--│ сервис   │   KEYBOARD   │Сервис клавиатуры                 │
 │  │   │  │ BIOS     │   SERVICES   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Обеспечивает интерфейс с клавиатурой для прикладной программы.  На-
жатия  клавиш  на  самом деле обрабатываются асинхронно на заднем плане.
Когда клавиша получена от клавиатуры, она обрабатывается прерыванием 09h
и помещается в циклическую очередь (буфер клавиатуры).

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │17│fun│--│ сервис   │   PRINTER    │ Поддержка принтера               │
 │  │   │  │ BIOS     │   SERVICES   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Данное сервисное прерывание предоставляет доступ к  портам  парал-
лельных принтеров (LPT1 и т.д.). Адреса портов принтеров хранятся, начи-
ная с 0:0408.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │18│   │  │ Указатель│   TRANSFER   │ Встроенный Бейсик                │
 │  │   │  │ BIOS     │ TO ROM BASIC │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Этот вектор содержит точку входа для интерпретатора ROM-BASIC,  ко-
торый установлен только на оригинальных компьютерах фирмы IBM.  Клоны не
имеют  BASIC  в  ROM-памяти  и  должны использовать отдельную программу,
обычно GWBASIC.  Иногда используется для обработки  ситуации,  когда  ни
один из дисков не читается (сбоит или отсутсвует).

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │19│ - │- │ сервис   │  BOOTSTRAP   │ Начальный загрузчик              │
 │  │   │  │ BIOS     │   LOADER     │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

    Выполняет попытку считывания бутсектора с дисковода А  или  C.  Если
чтение оказалось успешным, то управление передается считанному начально-
му загрузчику. Этот вектор рассматривается после POST , чтобы попытаться
загрузить  и выполнить какой-либо код "начального вызова" на дискете или
винчестера.  Данные в секторе 1 дорожки 0 головки 0 дисковода 0 для пер-
вого откликнувшегося диска (дискеты или винчестера) загружаются по абсо-
лютному адресу 0000:7c00,  и управление передается по этому адресу. Если
опрос всех дисков неудачен,  управление передается на прерывание INT 18h
.  На винчестере, этот код в "корневом секторе" в действительности опре-
деляет MBR,  который исходя из данных в Partiton Table затем загружает и
выполняет бутсектор соответствующего раздела.  Это  передает  управление
активной операционной системе диска. Это прерывание используется вируса-
ми "переживающими" теплую перезагрузку.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │1A│fun│--│ сервис   │  REAL TIME   │ Ввод-вывод для времени           │
 │  │   │  │ BIOS     │CLOCK SERVICES│                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Эта сервис предоставляет доступ к системным часам. PC BIOS работает
со "счетчиком тиков" - числом  55-мс  интервалов,  прошедших  с  момента
включения или сброса PC.  BIOS PC/AT предоставляет также доступ к значе-
ниям часов реального времени,  которые постоянно обновляются  независимо
от работы процессора и хранятся в CMOS-памяти компьютера AT.


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │1B│ - │--│Указатель │   KEYBOARD   │ Прерывание  от нажатия клавиши   │
 │  │   │  │          │    BREAK     │  Control-Break                   │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Этот вектор (0:006c) берется, когда BIOS распознает нажатие клави-
ши Ctrl-Break.  INT 1bh первоначально указывает на IRET, но DOS устанав-
ливает его на локальную программу,  которая взводит внутренний флаг DOS.
DOS время от времени проверяет этот флаг и действует  в  соответствии  с
действующим  режимом обработки прерываний.  (см прил.5 функции 33h и INT
23h, используемые для обработки Ctrl-Break в программе).


 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │1C│ - │--│Программно│CLOCK TICK    │Пользовательское прерывание       │
 │  │   │  │аппаратное│TIMER TICKS - │по таймеру                        │
 │  │   │  │прерывание│              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Этот вектор  (0:0070)  BIOS берет по каждому тику аппаратных часов
(каждые 55 миллисекунд; приблизительно 18.2 раз в секунду). Первоначаль-
но он указывает на IRET, но может быть изменен пользовательской програм-
мой,  чтобы адресовать фоновую программу пользователя,  базирующуюся  на
таймере.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │1D│ - │--│ указатель│6845 VIDEO    │ Указатель видеопараметров        │
 │  │   │  │   BIOS   │INIT TABLES   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Этот вектор (0:0074) указывает на совокупность  видео  параметров,
используемых прерыванием INT 10h для установки регистров видеоконтролле-
ра и некоторых констант BIOS при инициализации режима видео.  Можно соз-
дать  RAM-резидентную  версию  этой  таблицы и модифицировать параметры,
чтобы изменить работу некоторых экранных режимов. Например, таким спосо-
бом команда DOS "Mode" сдвигает экран влево или вправо.
 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │1E│ - │--│ Указатель│DISKETTE PARAM│Указатель параметров дискеты      │
 │  │   │  │    BIOS  │(BASE TABLE)  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Этот вектор (0:0078) указывает на таблицу параметров дискеты,  ко-
торую прерывание 13h использует для различных операций с дискетами.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │20│ - │--│ сервис   │PROGRAM       │ Завершить программу              │
 │  │   │  │ MS DOS   │TERMINATION   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

       Это прерывание  используется  для  выхода из программы и возврата
управления родительскому процессу (обычно COMMAND.COM). Оно восстанавли-
вает  значения управляющих векторов INT 22h INT 23h INT 24h и сбрасывает
все файловые буфера.  Регистр CS должен содержать значение PSP завершаю-
щегося процесса. Программы COM-формата обычно выполняются при CS=PSP, И,
следовательно, могут выдавать INT 20h в любой момент.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │21│fun│  │ сервис   │   DOS        │ Функции MS DOS                   │
 │  │   │  │ MS DOS   │  SERVICE     │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Это прерывание служит главным входом большинства функций DOS.
Подробнее см. прил.5.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │22│ - │--│ Указатель│  TERMINATE   │Адрес завершения                  │
 │  │   │  │ MS DOS   │   ADDRESS    │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Адрес в  этом  векторе (0000:0088) представляет собой место,  куда
будет передано управление, когда текущая программа завершится выполнени-
ем  функции 20h (традиционный выход в DOS),  21-00h,  21-4Ch(EXIT),  27h
(TSR:  Завершиться,  но остаться резидентным) или 21-31h (KEEP). Адрес в
этом векторе копируется в поле PSP Terminate Address функциями 26h (соз-
дать PSP) и 4bh (EXEC). Подробнее см. прил.5.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │23│ - │--│Указатель │  CONTROL "C" │ Адрес выхода по Ctrl-Break       │
 │  │   │  │ MS DOS   │ EXIT ADDRESS │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
      Адрес в этом векторе (0000:008c) - это адрес,  по которому переда-
ется   управление,   когда   DOS   распознает,  что  пользователь  нажал
Ctrl-Break.  Адрес по вектору INT 23h копируется в поле  PSP  Ctrl-Break
Address функциями DOS 26h (создать PSP) и 4ch (EXEC).  Исходное значение
адреса обработчика Ctrl-Break восстанавливается из  PSP  при  завершении
программы.  Таким  образом,  по  завершении  порожденного процесса будет
восстановлен адрес обработчика Ctrl-Break из родительского процесса. DOS
вызывает  INT 23h,  когда распознает,  что нажата комбинация Ctrl-Break.
Реакция на  нажатие  Ctrl-Break  может  быть  проверена  или  установлен
посредством функции 33h (см. прил.5).

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │24│ - │--│Указатель │ FATAL ERROR  │Обработчик критических ошибок     │
 │  │   │  │ MS DOS   │HANDLER ADDRES│                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
       Этот вектор (0000:0090) хранит адрес,  по которому передается уп-
равление,  когда драйвер устройства DOS обнаруживает критическую ошибку.
Адрес  по  этому  вектору копируется в PSP функицями 26h (Создать PSP) и
4bh (EXEC).  При выходе родитель- ские значения восстанавливаются в век-
торе  INT 24h из родительского PSP.  Нормальный обработчик INT 24h - это
код, который выдает сообщение:

      Abort, Retry, Ignore?

при неготовности дискеты или принтера. Многие вирусы используют для бло-
кирования этого сообщения собственный обработчик критических ошибок.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │25│ - │--│ сервис   │   ABSOLUTE   │ Прямая дисковая операция чтения  │
 │  │   │  │ MS DOS   │  DISK READ   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Этот сервис DOS предоставляет прямой доступ к любому сектору диска,
доступному через DOS-BIOS или устанавливаемые драйверы устройств.  Логи-
ческие секторы DOS начинаются с корневого сектора . Первый сектор в раз-
деле DOS - это логический сектор 0.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │26│ - │--│ сервис   │   ABSOLUTE   │ Прямая дисковая операция записи  │
 │  │   │  │ MS DOS   │  DISK WRITE  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
     См. пояснение к прерыванию 25h.
 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │27│ - │--│ сервис   │TERMINATE BUT │           Завершиться,           │
 │  │   │  │ MS DOS   │STAY RESIDENT │     но остаться резидентным      │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Возвращает управление  DOS,  оставляя  часть памяти распределенной,
так что последующие программы не будут перекрывать программный  код  или
данные  в  этой памяти.  INT 27h - это традиционный метод создания рези-
дентных программ который используется рядом простых  вирусов.  Наряду  с
ней используется функция 31h (KEEP) см. прил.5.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │28│ - │3+│ сервис   │  KEYBOARD    │  Квант времени DOS               │
 │  │   │  │ MS DOS   │  BUSY LOOP   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Это недокументированное прерывание DOS использует, когда ждет нажа-
тия  клавиши,  а также перед вызовом некоторых функций DOS с номерами до
0ch включительно.  PRINT (спулер печати MS DOS) перехватывает этот  век-
тор,  чтобы  найти  квант времени для чтения файлов и вывода на принтер.
Это прерывание используется также различными резидентными программами.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │2A│fun│3+│Microsoft │   NETWORK    │                                  │
 │  │   │  │Networks  │              │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │2E│ - │3+│ сервис   │   EXECUTE    │Выполнить команду DOS             │
 │  │   │  │ MS DOS   │   COMMAND    │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

      Это недокументированное прерывание выполняет команду DOS, как если
бы эта команда была введена в ответ на подсказку DOS.

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │2F│fun│3+│ сервис   │  PRINT       │Мультиплексное прерывание         │
 │  │   │  │ MS DOS   │ Multiplexor  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

     Этот вектор (0000:00bc) предоставляет средства управления процесса-
ми,  доступные  всей системе из любой программы.  Часто используется для
проверки наличия в памяти той или иной резидентной программы.  использу-
ется спулером печати (команда PRINT).

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │41│ - │--│ Указатель│  FIXED DISK  │ Таблица параметров витнчестера   │
 │  │   │  │          │  PARAMETERS  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘
      Эта 16-байтовая  структура  находится по адресу вектора прерывания
INT 41h 4-байтовый адрес в 0:0104).  Параметры  для  второго  винчестера
(если  он есть) находятся по адресу вектора INT 46h.  Эти таблицы задают
некоторые важные переменные для операций с винчестера

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │46│ - │--│ Указатель│  Secondary   │ Таблица параметров второго       │
 │  │   │  │          │  FIXED DISK  │ винчестера                       │
 │  │   │  │          │  PARAMETERS  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │4A│ - │--│          │  User Alarm  │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │5C│fun│--│ сервис   │   NETBIOS    │                                  │
 │  │   │  │ MS DOS   │  INTERFACE   │                                  │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │67│fun│--│ сервис   │   LIM EMS    │ Функции управления расширенной   │
 │  │   │  │ MS DOS   │  INTERFACE   │ (EMS) памятью                    │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

 ╒══╤═══╤══╤══════════╤══════════════╤══════════════════════════════════╕
 │E0│ - │--│          │              │ CP/M-86 function calls           │
 └──┴───┴──┴──────────┴──────────────┴──────────────────────────────────┘

