Рис.
Результати роботи програми
Лістинг програми.
Resid.asm
p286n
CSEG segment
assume cs: CSEG, ds: CSEG, es: CSEG, ss: CSEG; налаштуємо сегменти для COM програми
org 100h
Start:
Переходимо на мітку ініціалізації.
jmp Init
Оброблювач мультиплексного переривання int 2Fh
new_2fh proc
cmp ah, 0C8h; наша функція
jne no
cmp al, 00h; подфункция перевірки наявності резидента в пам'яті
je testt
cmp al, 01h; подфункция візуальної перевірки
je mestest
cmp al, 02h; подфункция завантаження даних в поля резидента
je load
cmp al, 03h; подфункция видалення резидента з пам'яті
je uninstall
cmp al, 04h; подфункция отримання результату процедури
je getno: csdsah, 09hdx, offset mes1; сообщеніе21h dx, [dword ptr cs: old_09h]; установка старого вектора 09h
mov ax, 2509h
int 21h
lds dx, [dword ptr cs: old_2fh]; установка старого вектора 2Fh
mov ax, 252fh
int 21h
push cs; настройка es на сs
pop es
mov ah, 49h; звільнення сегмента
int 21h
iret
NO:
jmp [dword ptr cs: old_2fh]; в старий обробник без повернення
iret
load:; завантаження даних
; ds-si-семгент офсет операнда з транцітной програми
push es csesdi, offset operandcx, 5movsw [cs: Active], 0 [cs: fl_active], 1 [cs: error], 0 es
iret
get:; повернення результат
push ds csdssi, offset Result cx, 5
rep movsw
cmp [Active], 1; установка ідентифікатора виклику процедури множення
je tiret
net:
stc
mov ch, 0ffh; сх = 0ffffh індикатор виклику процедури
tiret: cl, [cs: Error] ds
iret
testt: ; перевірка на наявності в пам'яті
mov al, 0ffhdx, 8888h
mestest:; перевірка з висновком повідомлення
push ax dx ds csdsah,...