Лабораторна робота №4
Тема: Запис нагромаджувача від використання несанкціонованих дискет з використанням інженерних циліндрів диску.
Мета: Створення резидентної програми, що обмежує доступ до дискет за допомогою використання форматування інженерних циліндрів гнучкого диску.
Індивідуальне завдання: Необхідно розробити і налагодити програму, що включає до себе:
- резидентну частину, що перевіряє правильність ідентифікаційної інформації, що зберігається в ділянках диска, які відформатовані нестандартним засобом;
- транзитну частину, що виконує завантаження резидентної частини.
Номер доріжки 80 сторона 0.
Структура доріжки 256, 256, 256, 256, 512, 1024, 1024, 1024.
Кількість секторів N = 8.
Сектор, в який виконується запис даних L = 8/2 = 4
Зміщення для першого запису = 14, для другого = 256-14-10 = 232.
Метод та алгоритм рішення задачі:
- транзитної частини, що установлює власний оброблювач 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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.