jnz error
inc di
inc si
loop loopm
POP sp ss es ds di si dx cx bx ax
m4:
pushf
call old_9h
POP es ds di si dx cx bx ax
iret
error: pop sp ss es ds di si dx cx bx ax
mov dl,01
jmp m4
border endp ; Конец резидентной части
;----------------------------------------
; Часть данной программы, удаляемая из памяти
init:
; Проверяем, присутствует ли уже в памяти
; наша резидентная программа
push es
mov ah,35h
mov al,13h
int 21h ; (es:bx) - адрес точки входа
; в программу обработки
; прерывания 13h
; Если в памяти уже размещена наша программа обработки
; прерывания 13h, то адрес байта es:(bx-1) есть адрес
; байта-индикатора res_is
mov al,byte ptr es:[bx-1]
cmp byte ptr es:res_is,al
jz already
pop es
;========================================
; Реализуем резидентное размещение.
;========================================
; Формируем и запоминаем адрес точки входа в нашу резидентную
; программу
lea dx,border
mov word ptr adr_res,dx
mov word ptr adr_res+2,cs
;----------------------------------------
; Перепрограммируем вектор 13h
;----------------------------------------
assume ds:int_tab
push ds
mov ax,int_tab
mov ds,ax
cli
; В качестве "старого" запоминаем текущее значение вектора 13h
mov ax,word ptr vect_9h
mov word ptr old_9h,ax
mov ax,word ptr vect_9h+2
mov word ptr old_9h+2,AX
; В качестве текущего значения вектора 9h запоминаем адрес
; точки входа в нашу резидентную программу
mov word ptr vect_9h,offset border
mov word ptr vect_9h+2,cs
sti
pop ds
mov ah,09h
lea dx,text_1
int 21h
mov ah,08h
int 21h
mov dx,offset init
inc dx ; (dx) - расстояние в байтах от
; PSP данной программы до
; конца резидентно размещае-
; мой ее части
; (cs) - сегментная часть адреса PSP
int 27h ; Резидентное размещение программы
;========================================
already:
pop es
;----------------------------------------
; Резидентная часть данной программы уже размещена в памяти.
; Если считаем, что ее целесообразно удалить, то при
; повторном вызове данной программы должны указать
; параметр /d в командной строке.
xor ax,ax ; Анализируем содержимое
mov al,es:80h ; командной строки
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.