"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора

SET_UP:
MOV DX,OFFSET ROUTINE ;смещение процедуры в DX
MOV AL,70H ;номер вектора прерывания
MOV AH,25H ;функция установки вектора
INT 21H ;устанавливаем вектор

;---завершение программы, оставляя резидентной
LEA DX,FINISH ;определяем треб. смещение
INT 27H ;завершение

Случай файла EXE:
~~~~~~~~~~~~~~~~~
;---здесь резидентная процедура
JMP SHORT SET_UP ;переход на установку
ROUTINE PROC FAR
PUSH DS ;сохранение регистров
.
(процедура)
.
POP DS ;восстановление регистров
IRET ;возврат из прерывания
FINISH EQU $ ;отметка конца процедуры
ROUTINE ENDP

;---установка вектора прерывания
SET_UP:
MOV DX,OFFSET ROUTINE ;смещение процедуры в DX
MOV AX,SEG ROUTINE ;сегмент процедуры в DS
MOV DS,AX
MOV AL,70H ;номер вектора прерывания
MOV AH,25H ;функция установки вектора
INT 21H ;установка вектора

;---завершение программы
MOV DX,FINISH+100H ;вычисляем смещение конца
MOV BYTE PTR ES:1,27H ;посылаем 27H в PSP
RET ;завершаем процедуру

Функция 31H прерывания 21H работает аналогично, за исключением
того, что в DX должно содержаться число 16-байтных параграфов,
требуемых процедуре (вычисление размера процедуры, начиная от
начала PSP - см. в примере [1.3.1]). Преимуществом этой функции
является то, что она передает родительской программе код выхода,
дающий информацию о статусе процедуры. Родительская программа
получает этот код с помощью функции 4DH прерывания 21H. Коды
выхода обсуждаются в [7.2.5].


.h3 1.3.5 Загрузка и запуск программных оверлеев.
-------------------------------------------------