1h
mov word ptr cs: old_2fh, bx; Збережемо зміщення системного обробника
mov word ptr cs: old_2fh +2, es; Збережемо сегмент системного обробника
; Заповнимо вектор 2fh
mov ax, 252fh; Функція встановлення вектора переривання 2fh
mov dx, offset new_2fh; Зсув нашого обробника
int 21h
; Збережемо вектор 09h
mov ax, 3509h; Функція отримання вектора 09h
int 21h
mov word ptr cs: old_09h, bx; Збережемо зміщення системного обробника
mov word ptr cs: old_09h +2, es; Збережемо сегмент системного обробника
; Заповнимо вектор 09h
mov ax, 2509h; Функція встановлення вектора переривання 09h
mov dx, offset new_09h; Зсув нашого обробника
int 21h
mov ah, 4eh; Функція пошуку файлу
lea dx, filename; DS: DX В¬ ASCIIZ імені файлу
int 21h
cmp ax, 12h; Файл не знайдено?
je creat; Так, створимо файл
call div2_f; Ні, виклик процедури відкриття файлу і запису в нього поточної дати і часу
jmp by; Перехід на мітку by
creat: call div_f; Виклик процедури створення файлу
; Виведемо на екран інформаційне повідомлення
by: mov ah, 09h; Функція виведення на екран
lea dx, mes; DS: DX В¬ адреса рядка
int 21h
mov ax, 3100h; Функція В«завершитися і залишитися резидентним В»
mov dx, (end_res-main +10 fh)/16; Розмір в параграфах
int 21h
installed:
cmp flag, 1; Запит на вивантаження встановлений?
je unins; Так, на вивантаження
; Виведемо на екран інформаційне повідомлення
mov ah, 09h; Функція виведення на екран
lea dx, mes1; DS: DX В¬ адреса рядка
int 21h
; Виведемо застережливий звуковий сигнал
mov cx, 5; Кількість гудків
mov ah, 02h; Функція виведення на екран
l: mov dl, 07h; ASCII код зумера
int 21h
loop l; Повторимо CX раз
mov ax, 4c01h; Функція завершення з кодом повернення
int 21h
unins:
; Перешлемо в першу (резидентну) копію програми запит на вивантаження
mov ax, 0f101h; Наша функція з підфункції вивантаження
int 2fh; Мультиплексне переривання
; Виведемо на екран інформаційне повідомлення
mov ah, 09h; Функція виведення на екран
lea dx, mes2; DS: DX В¬ адреса рядка
int 21h
mov ax, 4c00h; Функція завершення програми
int 21h
buf db 'Skencode & Klav_flag file', 0ah, 0dh
buflen equ $-buf
mes db 'Program installed $'
mes1 db 'Program already installed $'
mes2 db 'Program is DIE $'
init endp
text ends
end main
В
3.4. Рекомендації з поліпшенню
- Головним недоліком цієї програми ...