Меню сайта

Урок 165. Команда форматирования

Команда форматирования инициализируетновую дискету. — Когда вы
— — — инициализируете дискету, происходит записьна нее маркеров
— — — идентификации секторов. — Эти поля контроллер использует при
— — — операциях чтения и записи для опознаваниясекторов. — Например, во
— — — время операции чтения BIOS посылает четыребайта идентификации
— — — сектора в контроллер дисковода. — Эти четыре байта обычно
— — — соответствуют номеру дорожки, номеруголовки, номеру сектора и
— — — размеру сектора, и называются номеромцилиндра-головки-записи CHRN.
— — — Контроллер использует значение номера CHRNсравнивая его со
— — — значениями, записанными в поляидентификации секторов во время
— — — форматирования.
— — — — — Это означает, что контроллер не обращаетвнимания на то, что
— — — записано в поле номера CHRN на дискете,т.е. сектора могут
— — — пронумерованы в произвольном порядке, неот первого до восьмого на
— — — каждой дорожке. Как только контроллернаходит сектор, у которого
— — — поле номера CHRN совпадает с заданным, ончитает сектор. Значения

— — — — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — — — — 1/1/8004: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:. Вы должны быть готовы к
— — — этому, если собираетесь выполнить этупрограмму.

— — — — — Вы можете использовать командуформатирования в том случае,
— — — если хотите з
ащитить дискету откопирования. Защита от копирования
— — — означает, что дискета шифруется такимобразом, что ее становится
— — — трудно скопировать. Так как утилита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), номера у секторовдолжны быть
— — — последовательными, но не обязательноначинаться с первого.

— — — — — В общем, команда форматирования даетнекоторое средство защиты
— — — от копирования. Однако абсолютно надежныйметод защиты еще не
— — — найден. Только хороший выбор техникишифрования поможет оставить
— — — честных людей честными.

Категория: Программирование на Ассемблере | Дата: 28.02.13

Меню раздела
Блок