mov si,ax ; es:80h - адрес DTA в PSP
mov al,es:[80h+si]
cmp al,'d'
je delet ; В командной строке указан
; параметр /d
jmp povtor ; Данную программу вызвали
; повторно, но параметр
; /d не указали
;========================================
delet:
; Пытаемся удалить нашу резидентную программу
push es
mov ah,35h
mov al,013h
int 21h ; (es:bx) - текущее содержимое
; вектора 13h
mov ax,es
push ds
lds dx,es:adr_res ; (ds:dx) - адрес точки входа
; в наш резидент
; Если сегментная часть или смещение указанных адресов
; не совпадают, то удалять нашу резидентную программу
; сейчас нельзя
mov cx,ds
pop ds
cmp dx,bx
jnz no_delete
cmp ax,cx
jnz no_delete
;----------------------------------------
; Реализуем удаление
cli
push ds
mov ah,25h
mov al,013h
lds dx,es:old_9h ; (ds:dx) - восстанавливаем
int 21h ; "старое" значение вектора 13h
pop ds
sti
; mov ax,0ffffh (Можно использовать для обеспе-
; mov es,ax чения перехода на метку err_49h)
mov ah,49h ; Освобождаем память, выделенную
; для размещения нашей резидентной
; программы: (es) - номер параграфа,
; выделенного участка памяти
int 21h
jc err_49h
pop es
mov ah,09h
lea dx,text_4
int 21h
mov ah,08h
int 21h
jmp quit
;========================================
povtor:
mov ah,09h
lea dx,text_2
int 21h
mov ah,08h
int 21h
jmp quit
no_delete:
mov ah,09h
lea dx,text_3
int 21h
mov ah,08h
int 21h
jmp quit
err_49h:
mov ah,09h
lea dx,err_msg
int 21h
mov ah,08h
int 21h
quit:
mov ah,4ch ; Реализуем возврат в систему
int 21h
code ends
end nach
Результати роботи програми:
Створили резидентну програму, що обмежила доступ до дискет без мітки, або з некоректною міткою. Програма перевіряє мітку записану в інженерних секторах, відформатованих нестандартним способом.
Висновок: Навчився писати резидентні програми, що обмежує доступ до дискет за допомогою використання форматування інженерних циліндрів гнучкого диску.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.