
ZI-LR&PZ / LR_1-2
.pdf
Методичні вказівки до лабораторної роботи 1-2
“Запис і читання інформації в інженерні циліндри диска” за курсом “Захист інформації у комп’ютерних системах та мережах”
1. Ціль роботи Придбання навичок роботи з нестандартними можливостями дисків на низькому рівні.
2.Теми для попереднього пророблення. Структура диска.
Способи захисту дискет.
Запис даних у інженерних циліндрах.
Робота з перериваннями (зокрема переривання 13Н, 1ЕН). Керування контролером дисководів.
3.Постановка задачі
Необхідно розробити і налагодити програму що дозволяє виконати форматування інженерних секторів дискети, запис, читання і перевірку якості виконання операція з цими секторами.
4. Індивідуальні завдання Виконати запис ідентифікаційної інформації:
-s1 – прізвище студента
-s2 – група студента.
узазначений сектор на доріжці, який відформотована відповідно до індивідуального завдання.
Таблиця форматування доріжки |
|
|
|
Вибір сторони і доріжки |
|||||
S * K |
1024 |
512 |
256 |
|
№ (+) 4 |
доріжка |
сторона |
|
|
№ (+) 9 |
|
|
|
|
|
|
|
|
|
0 |
1 |
|
8 |
|
0 |
|
80(40) |
0 |
|
1 |
1 |
4 |
|
|
1 |
|
80(40) |
1 |
|
2 |
2 |
2 |
4 |
|
2 |
|
81(41) |
0 |
|
3 |
2 |
3 |
2 |
|
3 |
|
81(41) |
1 |
|
4 |
2 |
1 |
6 |
|
|
|
|
|
|
5 |
3 |
1 |
4 |
|
|
|
|
|
|
6 |
3 |
2 |
4 |
|
|
|
|
|
|
7 |
4 |
1 |
2 |
|
|
|
|
|
|
8 |
4 |
|
4 |
|
|
|
|
|
|
напрямок нумерації секторів
де № - номер по журналі групи
(+) – операція обчислення залишку при цілочисловому розподілі. [+] – операція цілочислового розподілу
S – довжина сектора
К – число секторів заданої довжини
N – сумарне число секторів на доріжці
номер сектора, у який виконується запис інформації L = N [+] 2

зсув для запису s1 off1 у секторі L дорівнює № байт
зсув для запису s2 off2 у секторі L дорівнює (Довжина сектора - № - 10) байт
Приклад: номер по журналі 43 у таблиці форматування рядок з кодом 7
структура доріжки (1-10): 256,256,512,1024,1024,1024,1024
номер доріжки 80 сторона 0
N = 10
L = 5 off1 = 43
off2 = 128 – 43 – 10 = 75
Примітки:
Необхідно настроїти таблицю контролера дисководів (див. лекції) при виконанні форматування, записи, читання.
Для кожної довжини сектору треба перенастроювати контролер гнучних дисків.
Правильно формувати таблицю форматування доріжки.
5.Приклад рішення задачі
Умова завдання.
Створити таблицю форматування інженерного циліндра для контролера дисководів за допомогою переривання 1ЕН (80 циліндр, 1 сторона, 12 секторів, довжина сектора 256 байт).
Виконати форматування встановленого циліндра
Записати в нього ідентифікаційну інформацію і перевірити якість запису.
Прочитати отриману інформацію
Приклад виконання завдання
.MODEL SMALL
STS segment para stack 'stack'
dw 1000 dup (0) |
|
|
TOS label word |
|
|
STS ends |
|
|
DATA segment |
|
|
track80 db |
80,1,01,1 |
;дорожка,головка,сектор,длина сектора |
db |
80,1,02,1 |
|
db |
80,1,03,1 |
|
db |
80,1,04,1 |
|
db |
80,1,05,1 |
|
db |
80,1,06,1 |
|
db |
80,1,07,1 |
|
db |
80,1,08,1 |
|
db |
80,1,09,1 |
|
db |
80,1,10,1 |
|

db |
80,1,11,1 |
|
db |
80,1,12,1 |
|
db |
80,1,13,1 |
|
db |
80,1,14,1 |
|
;таблица параметров контроллера дисководов |
||
DCP db |
0DFh ;задержка переключения головок(0Dh=3мс) |
|
|
;задержка при загрузке головок(Fh) |
|
db |
002h |
;время загрузки(=4мс) |
db |
025h |
;задержка перед выключением двигателя |
db |
001h |
;размер сектора(=256б) |
db |
00Dh |
;max номер сектора |
db |
01Bh |
;размер межсекторного промежутка(=1б) |
db |
0FFh |
;характеризует использование прерывания данных |
db |
054h |
;длина межсекторного промежутка для команды format |
db |
0F6h |
;байт заполнения |
db |
00Fh |
;время установки головок |
db |
008h |
;время запуска двигателя(=1/8сек) |
Firm |
db |
'write 01 sector $',0 |
;определение записываемой |
||
|
db |
|
256-27 dup (?) |
;информации |
|
Msg_Err db |
'Ошибка записи',13,10,'$' |
||||
Msg_Ok |
db |
'Запись выполнена',13,10,'$' |
|||
buf |
db |
|
256 dup (?) |
|
|
|
db |
|
'$' |
|
|
msg_buf db |
10,13,"Содержимое сектора после записи:",13,10,'$' |
||||
msg_read db |
'Ошибка чтения',13,10,'$' |
||||
DATA ends |
|
|
|||
CODE |
segment |
|
|||
|
assume |
cs:code, ds:data, es:data, ss:sts |
|||
start: mov |
ax,DATA |
|
|||
|
mov |
ds,ax |
|
||
|
mov |
es,ax |
|
||
|
mov |
ax,sts |
|
||
|
mov |
ss,ax |
|
||
|
mov |
sp,offset TOS |
|
||
;переустановка параметров дисководов |
|||||
|
mov |
ah,35h |
|
||
|
mov |
al,1Eh ;номер прерывания : этот вектор указывает на таблицу |
|||
|
|
|
|
;параметров дискеты |
|
|
int |
|
21h ;возвращает в ES:BX адрес программы обработки прерывания |
||
|
push |
bx |
|
||
|
push |
es |
|
||
|
mov |
ah,25h |
|
||
|
mov |
al,1Eh ;номер прерывания |
|||
|
lea |
|
dx,DCP ;в DS:DX вектор прерывания,указывающий на таблицу |
||
|
int |
|
21h |
;установка новых значений |
|
;оформление инженерного цилиндра |
|||||
|
push |
ds |
|
||
|
pop |
|
es |
|
|
|
lea |
|
bx,track80 ;адрес буфера, содержащего информацию о формате |
||
|
mov |
ah,05h ;функция формата дорожки |

|
|
;в CX - номер нужного цилиндра |
|
mov |
cl,00h |
;cl - биты 6-7 - старшие 2 бита 10-битного значения |
|
mov |
ch,50h |
;ch - младшие 8 бит |
|
mov |
dl,00h |
;адрес дисковода(A:) |
|
mov |
dh,01h |
;номер головки |
|
int |
13h |
|
;формат |
jc |
Error_Exit |
||
;управление названием Firm |
|||
mov |
bx,offset Firm |
||
mov |
cl,01h ;номер сектора,в который записывать Firm |
||
call |
Write_Info |
||
jc |
Error_Exit |
||
mov |
dx,offset Msg_Ok |
||
mov |
ah,09h |
|
|
int |
21h |
|
|
;вывод на экран содержимого записанного сектора |
|||
mov |
ah,9 |
|
|
mov |
dx,offset msg_buf |
||
int |
21h |
|
|
mov |
ah,02h |
|
|
mov |
al,01h |
|
|
mov |
ch,50h |
|
|
mov |
cl,01h |
|
|
mov |
dl,00h |
|
|
mov |
dh,01h |
|
|
mov |
bx,offset buf |
||
int |
13h |
|
|
jc |
err_read |
|
|
mov |
ah,09h |
|
|
mov |
dx,offset buf |
||
int |
21h |
;вывод содержимого буфера на экран |
|
jmp |
label_end |
||
;восстановление старых параметров дисковода |
|||
msg_c: mov |
ah,9h |
||
int |
21h |
|
|
label_end: |
|
|
|
pop |
ds |
|
|
pop |
dx |
|
|
mov |
ah,25h |
|
|
mov |
al,1Eh |
|
|
int |
21h |
|
|
mov |
ah,4Ch |
||
int |
21h |
|
|
Error_Exit: |
|
|
|
mov |
dx,offset Msg_Err |
||
jmp |
Msg_c |
|
|
err_read: |
|
|
|
mov |
dx,offset msg_read |
||
jmp |
Msg_c |
|
;запись физического сектора

Write_Info |
proc |
|
||
push |
bx |
;указывает на строку |
||
push |
cx |
;номер того сектора, куда записывать |
||
mov |
ah,03h |
|
||
mov |
al,01h |
;количество секторов |
||
mov |
ch,50h |
;номер цилиндра |
||
mov |
dl,00h |
;дисковод |
||
mov |
dh,01h |
;головка |
||
int |
13h |
;запись сектора |
||
jc |
Escp |
|
|
|
pop |
cx |
|
|
|
pop |
bx |
|
|
|
;проверка записи на CRC |
||||
mov |
ah,04h |
|
||
mov |
al,01h |
;количество секторов |
||
mov |
ch,50h |
|
||
mov |
dl,00h |
|
||
mov |
dh,01h |
|
||
int |
13h |
;верификация сектора (CRC check) |
||
Escp: |
ret |
|
|
|
Write_Info |
endp |
|
||
CODE |
ends |
|
|
|
end |
start |
|
|
7. Зміст звіту.
Тема лабораторної роботи
Ціль роботи
Опис використовуваних переривань і функцій BIOS
Алгоритм програми (графічний або словесний опис)
Текст програми
Результати роботи програми
Висновки