Команда форматирования инициализирует новую дискету. Когда вы инициализируете дискету, происходит запись на нее маркеров идентификации секторов. Эти поля контроллер использует при операциях чтения и записи для опознавания секторов. Например, во время операции чтения BIOS посылает четыре байта идентификации сектора в контроллер дисковода. Эти четыре байта обычно соответствуют номеру дорожки, номеру головки, номеру сектора и размеру сектора, и называются номером цилиндра-головки-записи CHRN. Контроллер использует значение номера CHRN сравнивая его со значениями, записанными в поля идентификации секторов во время форматирования.
Это означает, что контроллер не обращает внимания на то, что записано в поле номера CHRN на дискете, т.е. сектора могут пронумерованы в произвольном порядке, не от первого до восьмого на каждой дорожке. Как только контроллер находит сектор, у которого поле номера CHRN совпадает с заданным, он читает сектор. Значения
Microsoft (R) Macro Assembler Version 5.00 1/1/80 04:06:20
Фиг. 9.5 Форматирование дискеты Page 1-1
PAGE ,132
TITLE Фиг. 9.5 Форматирование дискеты
0000 STACK SEGMENT STACK
0000 0040[ DW 64 DUP (?)
????
]
0080 STACK ENDS
0000 CODE SEGMENT
ASSUME CS:CODE,ES:CODE
0000 00 00 01 02 00 00 02 ID_BUFFER DB 0, 0, 1, 2, 0, 0, 2, 2
02
0008 00 00 03 02 00 00 04 DB 0, 0, 3, 2, 0, 0, 4, 2
02
0010 00 00 05 02 00 00 06 DB 0, 0, 5, 2, 0, 0, 6, 2
02
0018 00 00 07 02 00 00 08 DB 0, 0, 7, 2, 0, 0, 8, 2
02
0020 FORMAT PROC FAR
0020 1E PUSH DS ; Адрес возврата в ДОС
0021 2B C0 SUB AX, AX
0023 50 PUSH AX
0024 8D 1E 0000 R LEA BX, ID_BUFFER ; Занесение адреса буфера в ES:BX
0028 0E PUSH CS
0029 07 POP ES
002A B9 0001 MOV CX, 1 ; Трек 0, сектор 1
002D BA 0000 MOV DX, 0 ; Дисковод 0, сторона 0
0030 TRACK_LOOP:
0030 8D 3E 0000 R LEA DI, ID_BUFFER ; Необходимо для занесения номера
0034 B0 08 MOV AL, 8 ; трека в буфер форматирования
0036 ID_SETUP:
0036 26: 88 2D MOV ES:[DI], CH ; Занесение номера трека (цилиндра)
0039 83 C7 04 ADD DI, 4 ; Переход на следующее поле
003C FE C8 DEC AL
003E 75 F6 JNZ ID_SETUP ; Цикл по полям в буфере
0040 B8 0501 MOV AX, 501H ; Форматирование
0043 CD 13 INT 13H
0045 FE C5 INC CH ; Переход на следующий трек
0047 80 FD 40 CMP CH, 40H ; Все сформатировано?
004A 75 E4 JNE TRACK_LOOP ; Цикл по трекам
004C CB RET ; Возврат в ДОС
004D FORMAT ENDP
004D CODE ENDS
END FORMAT
Фиг. 9.5 Форматирование дискеты номера CHRN контроллер помещает на дискету во время операции форматирования. Вы имеете возможность записать в качестве значений номера CHRN любые значения, которые выберете. Буфер данных для команды форматирования содержит байты номера CHRN для каждого сектора дискеты. Это означает, что буфер данных может содержать например такие значения:
DB 10,0,1,2,10,0,2,2
DB 10,0,3,2,10,0,4,2
для дорожки 10 стороны 0 дискеты. Это пример поля данных, которое использует команда FORMAT операционной системы PC DOS или MS DOS. На Фиг. 9.5 показана программа, которая форматирует одностороннюю дискету с обычными значениями номера CHRN. Заменять этой программой команду FORMAT операционной системы PC DOS нельзя, так как система PC DOS также проверяет дискету и записывает на дискету справочник и таблицу расположения файлов. Еще вы можете заметить, что эта программа сразу же после запуска начинает форматировать дискету в дисководе A:. Вы должны быть готовы к этому, если собираетесь выполнить эту программу.
В общем, команда форматирования дает некоторое средство защиты от копирования. Однако абсолютно надежный метод защиты еще не найден. Только хороший выбор техники шифрования поможет оставить честных людей честными.