Запис нагромаджувача від використання несанкціонованих дискет з використанням інженерних циліндрів диску, страница 3

           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

Результати роботи програми:

Створили резидентну програму, що обмежила доступ до дискет без мітки, або з некоректною міткою. Програма перевіряє мітку записану в інженерних секторах, відформатованих нестандартним способом.

Висновок: Навчився писати резидентні програми, що обмежує доступ до дискет за допомогою використання форматування інженерних циліндрів гнучкого диску.