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

Страницы работы

Содержание работы

Лабораторна робота №4

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

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

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

-  резидентну частину, що перевіряє правильність ідентифікаційної інформації, що зберігається в ділянках диска, які відформатовані нестандартним засобом;

-  транзитну частину, що виконує завантаження резидентної частини.

Номер доріжки 80 сторона 0.

Структура доріжки 256, 256, 256, 256, 512, 1024, 1024, 1024.

Кількість секторів N = 8.

Сектор, в який виконується запис даних L = 8/2 = 4

Зміщення для першого запису = 14, для другого = 256-14-10 = 232.

            Метод та алгоритм рішення задачі:

  1. Розроблення таблиці контролера дисководів при виконанні форматування, запису та читання.
  2. Створити завантажуючий модуль, що складається з:

- транзитної частини, що установлює власний оброблювач 13Н переривання;

- резидентної частини: модуля, що обробляє 13Н переривання і перевіряє наявність ідентифікаційної інформації читанням сектора інженерного циліндра диска і дозволяє доступ до носія.

          Текст програми:

           .286

           title     RESIDENT   (файл - .com)

 ;----------------------------------------

; Резидентно размещаемая часть этой программы

; будет изменять цвет бордюра при каждом

; нажатии клавиш   Right_Shift/F12

 ;----------------------------------------

int_tab    segment   at 0h  ; Таблица векторов прерываний:

           org       13h*4   ; адрес вектора 9h,

vect_9h    label     dword  ; длина поля - 4 байта

int_tab    ends

 ;----------------------------------------

code       segment

           assume    cs:code

           org       100h   ; Создаем .com файл

  nach:

           jmp       init   ; Переход на удаляемую из памяти

                            ; часть данной программы

 ;----------------------------------------

adr_res    dd   ?           ; Адрес точки входа в нашу рези-

                            ; дентную программу

old_9h     dd   ?

vect_1e    dd   ?

color      db   0

kb_flag    equ  [byte ptr es:0417h]

text_1     db   10,13

           db   '  Вы только что загрузили в память вашу'

           db   10,13,'резидентную программу.'

           db   ' Активизируйте ее,',10,13

           db   10,13,'( А пока вернитесь в систему, ',10,13

           db   'нажав любую клавишу )',10,13,'$'

text_2     db   10,13,'     Вы пытаетесь загрузить вашу '

           db   'резидентную программу, ',10,13

           db   'но она уже в памяти содержится.'

           db   ' Для ее удаления запустите ',10,13

           db   'на выполнение ваш .com файл снова, ',10,13

           db   'указав в командной строке после имени файла '

           db   10,13,'параметр  /d ',10,13

           db   10,13,'( Снова вернитесь в систему, ',10,13

           db   'нажав любую клавишу )',10,13,'$'

text_3     db   ' Вашу резидентную программу сейчас '

           db   'удалять нельзя',10,13,'$'

text_4     db   10,13,'Вы удалили вашу резидентную программу '

           db   'из памяти ',10,13

           db   10,13,'( Вернитесь в систему, нажав '

           db   'любую клавишу )',10,13,'$'

err_msg    db   10,13,'             Ошибка'

           db   ,10,13,'    ( Нажмите любую клавишу )'

           db   10,13,'$'

res_is     db   'o'     ; Байт-индикатор присутствия нашей

                        ; резидентной программы в памяти

border     proc far

jmp l1

;таблица параметров контроллера дисководов

DCP     db      0DFh    ;задержка переключения головок(0Dh=3мс)

                        ;задержка при загрузке головок(Fh)

        db      002h    ;время загрузки(=4мс)

        db      025h    ;задержка перед выключением двигателя

        db      001h    ;размер сектора(=256б)

        db      008h    ;max номер сектора

        db      01Bh    ;размер межсекторного промежутка(=1б)

        db      0FFh    ;характеризует использование прерывания данных

        db      054h    ;длина межсекторного промежутка для команды format

        db      0F6h    ;байт заполнения

        db      00Fh    ;время установки головок

        db      008h    ;время запуска двигателя(=1/8сек)

buf db 256 dup('r')

ll      db      14 dup (177)

        db      'Moroz Sanya'

        db      197 dup (177)

        db      'KIT-12b'

        db      25 dup (177)

        db      '$'

l1:

           sti

           push   ax bx cx dx si di ds es

           cmp dl,00

           jnz m5

           jmp m6

m5:        jmp m4

m6:

           push   ax bx cx dx si di ds es ss sp

           push cs

           pop ds

           push cs

           pop es

           push ds

           pop es

           push es bx

           xor ax,ax

           mov es,ax

           mov bx,[es:1eh*4]

           mov es,[es:1eh*4+2]

           mov word ptr vect_1e,bx

           mov word ptr vect_1e+2,es

           xor ax,ax

           mov es,ax

           mov bx,offset DCP

           mov [es:1eh*4],bx

           mov [es:1eh*4+2],ds

           pop bx es

           mov ah,0ch

           mov cx,05100h

           mov dh,00h

           mov dl,00h

           pushf

           call old_9h

m2:

           mov ah,02h

           mov al,01h

           mov ch,51h

           mov cl,04h

           mov dl,00h

           mov dh,00h

           mov bx,offset buf

           pushf

           call old_9h

           jc m2

           push es ax

           xor ax,ax

           mov es,ax

           mov ax,word ptr vect_1e

           mov [es:1eh*4],ax

           mov ax,word ptr vect_1e+2

           mov [es:1eh*4+2],ax

           pop ax es

           mov ah,0ch

           mov cx,01h

           mov dh,00h

           mov dl,00h

           pushf

           call old_9h

           mov di,offset buf

           mov si,offset ll

           mov cx,255

loopm:

           mov ah,[di]

           mov al,[si]

           cmp al,ah

Похожие материалы

Информация о работе