На главную Назад
Добро пожаловать, уважаемый посетитель!
>

Команда форматирования инициализирует новую дискету.Когда вы

инициализируете дискету, происходит запись на нее маркеров

идентификации секторов.Эти поля контроллер использует при

операциях чтения и записи для опознавания секторов.Например, во

время операции чтения BIOS посылает четыре байта идентификации

сектора в контроллер дисковода.Эти четыре байта обычно

соответствуют номеру дорожки, номеру головки, номеру сектора и

размеру сектора, и называются номером цилиндра-головки-записи CHRN.

Контроллер использует значение номера CHRN сравнивая его со

значениями, записанными в поля идентификации секторов во время

форматирования.

Это означает, что контроллер не обращает внимания на то, что

записано в поле номера CHRN на дискете, т.е. сектора могут

пронумерованы в произвольном порядке, не от первого до восьмого на

каждой дорожке. Как только контроллер находит сектор, у которого

поле номера CHRN совпадает с заданным, он читает сектор. Значения

 

Microsoft (R) Macro Assembler Version 5.001/1/80 04:06:20

Фиг. 9.5 Форматирование дискетыPage1-1

 

PAGE ,132

TITLE Фиг. 9.5 Форматирование дискеты

0000 STACK SEGMENT STACK

00000040[ DW 64 DUP (?)

????

]

0080 STACK ENDS

0000 CODE SEGMENT

ASSUMECS:CODE,ES:CODE

000000 00 01 02 00 00 02 ID_BUFFER DB 0, 0, 1, 2, 0, 0, 2, 2

02

000800 00 03 02 00 00 04 DB 0, 0, 3, 2, 0, 0, 4, 2

02

001000 00 05 02 00 00 06 DB 0, 0, 5, 2, 0, 0, 6, 2

02

001800 00 07 02 00 00 08 DB 0, 0, 7, 2, 0, 0, 8, 2

02

 

0020 FORMATPROC FAR

00201E PUSH DS ; Адрес возврата в ДОС

00212B C0 SUB AX, AX

002350 PUSH AX

 

00248D 1E 0000 R LEA BX, ID_BUFFER ; Занесение адреса буфера в ES:BX

00280E PUSH CS

002907 POP ES

002AB9 0001 MOV CX, 1 ; Трек 0, сектор 1

002DBA 0000 MOV DX, 0 ; Дисковод 0, сторона 0

0030 TRACK_LOOP:

00308D 3E 0000 R LEA DI, ID_BUFFER ; Необходимо для занесения номера

0034B0 08 MOV AL, 8 ;трека в буфер форматирования

0036 ID_SETUP:

003626: 88 2D MOV ES:[DI], CH ; Занесение номера трека (цилиндра)

003983 C7 04 ADD DI, 4 ; Переход на следующее поле

003CFE C8 DEC AL

003E75 F6 JNZ ID_SETUP ; Цикл по полям в буфере

0040B8 0501 MOV AX, 501H ; Форматирование

0043CD 13 INT 13H

0045FE C5 INC CH ; Переход на следующий трек

004780 FD 40 CMP CH, 40H ; Все сформатировано?

004A75 E4 JNE TRACK_LOOP ; Цикл по трекам

004CCB RET ; Возврат в ДОС

004D FORMATENDP

004D CODE ENDS

END FORMAT

 

Фиг. 9.5 Форматирование дискеты

номера CHRN контроллер помещает на дискету во время операции

форматирования. Вы имеете возможность записать в качестве значений

номера CHRN любые значения, которые выберете. Буфер данных для

команды форматирования содержит байты номера CHRN для каждого

сектора дискеты. Это означает, что буфер данных может содержать

например такие значения:

 

DB10,0,1,2,10,0,2,2

DB10,0,3,2,10,0,4,2

 

для дорожки 10 стороны 0 дискеты. Это пример поля данных,

которое использует команда FORMAT операционной системы PC DOS или

MS DOS. На Фиг. 9.5 показана программа, которая форматирует

одностороннюю дискету с обычными значениями номера CHRN. Заменять

этой программой команду FORMAT операционной системы PC DOS нельзя,

так как система PC DOS также проверяет дискету и записывает на

дискету справочник и таблицу расположения файлов. Еще вы можете

заметить, что эта программа сразу же после запуска начинает

форматировать дискету в дисководе A:. Вы должны быть готовы к

этому, если собираетесь выполнить эту программу.

 

Вы можете использовать команду форматирования в том случае,

если хотите защитить дискету от копирования. Защита от копирования

означает, что дискета шифруется таким образом, что ее становится

трудно скопировать. Так как утилита DISKCOPY предполагает, что

идентификаторы секторов записаны обычным образом, она не может

копировать дискету с не стандартными номерами секторов. Записав на

дискету идентификатор сектора, отличный от нормального, вы защитите

ее от копирования.

 

В качестве примера давайте защитим дискету от копирования,

записав не стандартный номер сектора на дорожку 10. Пример,

приведенный выше, показывает обычные номера секторов. Если вместо

них буфер данных будет содержать значения DB 10, 0, 10, 2, 10, 0,

2, 2 DB 10, 0, 3, 2, 10, 0, 4, 2

 

дорожка 10 не будет иметь сектора 1. Вместо него на ней

появится сектор 10, которого не бывает на нормальной дискете

системы PC DOS. Программа DISKCOPY не может скопировать дорожку 10

правильно. Если теперь данная программа проверит (с помощью команды

проверки) наличие сектора 10 на дорожке 10 дискеты, отсутствие

ошибки будет означать, что дискета оригинальная, а не копия.

 

Этот способ защиты от копирования не совсем надежен. Каждый

опытный пользователь (и даже некоторые программы копирования) могут

обнаружить защиту такого типа и обойти ее. Но модификация

идентификаторов секторов не может производиться произвольно. Для

определения адреса установки головок BIOS использует номер дорожки

из поле CHRN, так что номер цилиндра должен соответствовать номеру

цилиндра, на котором находится сектор. Код в байте номера головки

определяет установку электронного переключателя, выбирающего

головку, поэтому это значение должно быть задано корректно. Длина

поля берется из таблицы параметров, а не из регистров при вызове,

так что ее изменить трудно. К тому же, это число использует и BIOS,

и контроллер, определяя длину сектора, так что изменить его вы

сможете только после тщательной подготовки. Свободно изменяемым

остается только номер сектора. Перед тем, как вы начнете изменять

номера секторов, запомните, что если при этом вы собираетесь еще

использовать эту дискету в рамках DOS, система будет пытаться

использовать сектор, который вы заменили сектором со своим

нестандартным номером, если вы не модифицируете таблицу

расположения файлов дискеты так, чтобы зарезервировать этот сектор.

Если вам нужно считывать по нескольку секторов (что позволяет

драйвер дисковода BIOS), номера у секторов должны быть

последовательными, но не обязательно начинаться с первого.

 

В общем, команда форматирования дает некоторое средство защиты

от копирования. Однако абсолютно надежный метод защиты еще не

найден. Только хороший выбор техники шифрования поможет оставить

честных людей честными.


 

Mail.ru