Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
76
Добавлен:
09.02.2015
Размер:
5.1 Mб
Скачать

Приложение А.07: Структуры данных для исполнения программ

При возврате кода статуса 04h номер прерывания в регистре BL игнорируется. Возвращаемый список состоит из групп по 3 байта на каждое прерывание: первый байт номер прерывания, следующее за ним слово смещение в том же сегменте (указанном в регистре DX) адреса вызова обработчика этого прерывания. Конец списка отмечен кодом 2Dh в позиции номера прерывания.

Примечание 5: при успешном завершении, подтверждаемом кодом статуса AL=FFh, в регистрах DX:BX возвращается указатель на список "горячих" клавишей. Содержание списка в разделе A.02-7.

Примечание 6: операция возвращает в регистре AL число установленных данной резидентной программой драйверов, а в регистрах DX:BX – указатель на заголовок первого из этих драйверов (A.05-1). В регистре AH операция возвращает байт флагов, в котором установление в единицу отдельных битов означает следующее:

бит 0 – драйверы нельзя выгрузить из памяти;

бит 1 – драйверы не включены в цепь драйверов DOS; бит 2 – установленные драйверы реентерабельны.

Биты 3 – 7 зарезервированы и должны быть обнулены. Если данная программа не устанавливала драйверов, то она возвращает значение AL=00h, и в этом случае содержимое регистров AH, BX и DX может быть произвольно изменено.

A.08 Таблицы параметров флоппи-дисководов

A.08-1 Сведения о флоппи-дисководах из области данных BIOS

В этой таблице приведены выборочные сведения о дисководах на гибких магнитных дисках. Все смещения указаны относительно сегментного адреса 0040h, то есть от начала области данных BIOS.

Смещение

Длина

Содержание

10h

2

Флаги: бит 0: возможна загрузка с флоппи-диска

 

 

биты 6-7: число флоппи-дисководов –1

3Eh

1

Установка бита 7 обработчиком IRQ6 отмечает

 

 

завершение операции флоппи-дисковода

3Fh

1

Состояние моторов флоппи-дисководов

40h

1

Счетчик времени для выключения мотора

41h

1

Биты 0-4: код завершения (примечание 2)

 

 

бит 5:отказ контроллера;

 

 

бит 6: ошибка при поиске;

– 639 –

Приложение А.08: Таблицы параметров флоппи-дисководов

Продолжение таблицы А.08-1

 

 

бит 7: дисковод не готов к исполнению операции

42h

3

Регистры контроллера флоппи-дисководов

8Bh

1

Скорость передачи, заданная контроллером

8Fh

1

Бит 0: дисковод 0 поддерживает 80 дорожек;

 

 

бит 2: наличие дисковода 0 зарегистрировано;

 

 

бит 4: дисковод 1 поддерживает 80 дорожек;

 

 

бит 6: наличие дисковода 1 зарегистрировано.

90h

1

Статус носителя в дисководе 0

 

 

биты 0-2: = 111b для дискет 3.5"

 

 

бит 3: дискета емкостью 2.88 Мбайт

 

 

бит 4: если = 0, тип дискеты не определен

 

 

биты 6-7: скорость обмена

91h

1

Статус носителя в дисководе 1 (как в байте 90h)

94h

1

Номер дорожки, где стоит головка дисковода 0

95h

1

Номер дорожки, где стоит головка дисковода 1

Примечание 1: представленное здесь расположение данных может зависеть от версии BIOS (об этом также в A.01-1).

Примечание 2: конкретные значения байта 41h расшифровываются так, как указано в приложении A.06-1 для прерывания INT 13.

A.08-2 Параметры доступа и форматирования

Система BIOS хранит параметры доступа и форматирования для каждого флоппи-дисковода в отдельных 11-байтовых таблицах. Для любого конкретного дисковода адрес такой таблицы можно получить с помощью INT 13\AH=08h (8.01-49). Указатель на одну из этих таблиц, относящуюся к принимаемому по умолчанию ("текущему") флоппи-дисководу, записывается в ячейку 0000:0078h в таблице прерываний (он известен еще как INT 1E).

Смена данных в таблицах параметров доступа и форматирования производится вызовом INT 13\AH=18h (8.01-54), однако измененные параметры будут приняты во внимание контроллером флоппи-дисководов только после установления его начального состояния посредством INT 13\AH=00h (8.01-44).

Смещение

Длина

Содержание

00h

1

Биты 7-4: скорость перемещения головки;

 

 

биты 3-0: время выгрузки головки (0Fh = 0.24 с).

01h

1

Биты 7-1: время загрузки головки (01h = 0.004 с);

 

 

бит 0: = 0 – обмен без использования DMA.

02h

1

Время до остановки вращения (в тактах 1/18 с).

03h

1

= 00h – размер сектора 128 байт,

– 640 –

Приложение А.08: Таблицы параметров флоппи-дисководов

Продолжение таблицы А.08-2

 

 

= 01h – размер сектора 256 байт,

 

 

= 02h – размер сектора 512 байт,

 

 

= 03h – размер сектора 1024 байт.

04h

1

Число секторов на дорожке

05h

1

Размер промежутка между секторами:

 

 

=2Ah для дискет 5.25",

 

 

=1Bh для дискет 3.5".

07h

1

Размер промежутков при форматировании:

 

 

=50h для дискет 5.25",

 

 

=6Ch для дискет 3.5".

08h

1

Заполняющий байт при форматировании (F6h)

09h

1

Время выведения головки на дорожку (в мс).

0Ah

1

Время раскрутки мотора (в тактах 1/18 с).

A.08-3 Регистрируемые BIOS типы флоппи-дисководов.

Типы имеющихся в компьютере флоппи-дисководов, указываемые в настройках программы BIOS Setup, записываются в ячейку 10h CMOS-памяти системы BIOS. Чтобы считать эти сведения из исполняемой программы, надо сначала командой OUT (7.03-66) послать адрес ячейки (10h) в порт 70h, а затем командой IN (7.03-26) считать искомый байт данных из порта 71h (еще об этом примечание 1 к A.14-1). Считанный байт данных оказывается в регистре AL, причем биты 4 – 7 характеризуют тип первого флоппи-дисковода, а биты 0 – 3 – тип второго флоппи-дисковода, если он имеется. Значение каждой из двух групп по 4 бита расшифровывается независимо согласно следующей таблице.

Значение

Тип флоппи-дисковода

 

 

0

Дисковод отсутствует

 

 

1

Дисковод для дискет 5.25

дюйма емкостью 360 кбайт

2

Дисковод для дискет 5.25

дюйма емкостью 1,2

мегабайта

3

Дисковод для дискет 3.5 дюйма емкостью 720 кбайт

4

Дисковод для дискет 3.5 дюйма емкостью 1,44

мегабайта

5

Дисковод для дискет 3.5 дюйма емкостью 2,88

мегабайта

A.09 Структуры данных для файлов и каталогов

A.09-1 Записи в каталогах и сведения о файлах

Сведения о файлах, метках тома и подкаталогах хранятся в соответствующих записях каталогов. Структура данных в обычной 32-байтовой записи для объектов

– 641 –

Приложение А.09: Структуры данных для файлов и каталогов

со стандартным "коротким" именем показана в первой колонке "D" приведенной ниже таблицы. На основе этих данных процедуры поиска INT 21\AX=4E00h (8.02-57) и INT 21\AH=4Fh (8.02-58) возвращают через область DTA (8.02-16)

сведения о найденных объектах; формат выдаваемых ими результатов поиска показан во второй колонке "F4E" приведенной ниже таблицы. Две другие поисковые процедуры INT 21\AH=11h (8.02-11) и INT 21\AH=12h (8.02-12) также выдают сведения о найденных объектах в области DTA, но в других форматах. Формат, показанный в третьей колонке "F1N" используется тогда, когда при запросе исходные данные представлены обычным блоком FCB (A.09-5, колонка "N"). Если же при запросе исходные данные представлены расширенным блоком FCB (A.09-5, колонка "E"), то результаты поиска выдаются в формате, показанном в четвертой колонке "F1E" приведенной ниже таблицы.

D

F4E

F1N

F1E

Длина

Содержание

 

 

 

00h

1

= FFh – признак расширенного FCB

 

 

 

06h

1

Атрибуты (A.09-2) для поиска

 

00h

00h

07h

1

Диск, 01h = A и т.д, (примечание 1)

00h

01h

01h

08h

8

Имя объекта, дополненное

 

 

 

 

 

пробелами до 8 байт

08h

09h

09h

10h

3

Суффикс, дополненный пробелами

 

 

 

 

 

до 3 байт

 

0Ch

 

 

1

Атрибуты (A.09-2) для поиска

 

0Dh

 

 

2

Номер записи в каталоге

 

0Fh

 

 

2

Начальный кластер каталога

0Bh

15h

0Ch

13h

1

Атрибуты найденные (A.09-2)

0Ch

 

 

 

1

Атрибуты (примечания 2 и 3)

0Dh

 

0Eh

15h

1

Время в 0.01 с. (примечание 3)

0Eh

 

0Fh

16h

2

Время создания (примечание 3)

10h

 

11h

18h

2

Дата создания (примечание 3)

12h

 

13h

1Ah

2

Дата последнего доступа к объекту

14h

 

15h

1Ch

2

Начальный кластер (примечание 4)

16h

16h

17h

1Eh

2

Время последнего изменения

18h

18h

19h

20h

2

Дата последнего изменения

1Ah

 

1Bh

22h

2

Начальный кластер (примечание 4)

1Ch

1Ah

1Dh

24h

4

Двоичный размер объекта в байтах

 

1Eh

 

 

13

Имя и суффикс (примечание 5)

Примечание 1: поисковые процедуры INT 21\AX=4E00h (8.02-57) и INT 21\AH=4Fh (8.02-58) устанавливают в единицу бит 7 в этом байте, если доступ к данному диску осуществляется через сеть.

Примечание 2: этим полем пользуются операционные системы Windows-2000/XP, но сведения о записанных туда данных не раскрыты.

– 642 –

Приложение А.09: Структуры данных для файлов и каталогов

Примечание 3: если объект создан под управлением операционной системы DOS, то это поле остается незаполненным. При копировании объектов в среде DOS данные из этого поля не копируются.

Примечание 4: в логических дисках с файловой системой FAT-16 номер

начального кластера объекта представляет собой одно слово в ячейке со смещением 1Ah, а поле 14h не используется. Но в логических дисках с файловой системой FAT-32 номер начального кластера представляет собой двойное слово, и два старших байта из этого двойного слова записаны в ячейку со смещением 14h.

Примечание 5: поисковые процедуры INT 21\AX=4E00h и INT 21\AH=4Fh не

перезаписывают имя найденного объекта поверх маски искомого имени, начинающейся со смещения 01h; при возврате из процедуры имя и суффикс найденного объекта, оканчивающиеся байтом 00h, указываются отдельно начиная со смещения 1Eh.

A.09-2 Структура байта атрибутов

Байт атрибутов со смещением 0Bh в составе записи каталога (A.09-1) определяет класс объекта, к которому данная запись относится. Структура байта атрибутов показана в приведенной ниже таблице.

Бит

Значение

0

Файл только для чтения

1

Скрытый файл

2

Системный файл

3

Метка тома (= 0b для файлов и каталогов)

4

Каталог (= 0b для файлов и меток тома)

5

Файл, подлежащий архивированию

6,7

= 00b, не используются в MS-DOS

Примечание 1: значение 0Fh байта

атрибутов отличительный признак тех

записей каталога, которые представляют "длинные" имена (A.09-3),

назначаемые операционными системами Windows-95/98/ME.

Примечание 2: состояния

битов 3 и

4 не могут быть изменены посредством

INT 21\AX=4301h (8.02-39) или с помощью ATTRIB.EXE (6.01).

Примечание 3: процедуры

поиска

файлов INT 21\AX=4E00h (8.02-57) и

INT 21\AH=4Fh (8.02-58) игнорируют состояния битов 0 и 5.

Примечание 4: обработчик прерывания INT 21\AX=6C00h (8.02-78) принимает из регистра CX слово атрибутов, в котором биты 4 и 6 – 15 должны быть сброшены в нуль, а назначение остальных битов соответствует приведенной здесь таблице.

– 643 –

Приложение А.09: Структуры данных для файлов и каталогов

A.09-3 Формат записей каталога, относящихся к "длинным" именам

Каждое "длинное" имя, назначенное операционными системами Windows-95/98/ME, занимает в каталоге по крайней мере несколько 32-байтовых записей. Последняя из них содержит укороченный вариант "длинного" имени и по структуре соответствует колонке "D" таблицы A.09-1. Но предшествующие записи, в которых "длинное" имя по частям записано знаками 16-битового уникода (Unicode), имеют другую структуру, показанную в приведенной ниже таблице.

Смещение

Длина

Содержание

00h

1

Порядковый номер записи (примечание 1)

01h

10

Знаки "длинного" имени, первая часть

0Bh

1

= 0Fh – запись принадлежит "длинному" имени

0Ch

1

= 00h (резервировано)

0Dh

1

Контрольная сумма (примечание 2)

10h

12

Знаки "длинного" имени, вторая часть

1Ah

2

= 0000h для всех записей "длинных" имен

1Ch

4

Знаки "длинного" имени, третья часть

Примечание 1: последняя запись, относящаяся к данному "длинному" имени, отмечается установлением в единицу бита 6 в первом байте.

Примечание 2: контрольная сумма короткого имени вычисляется сложением всех его 11 знаков со смещением суммы на один бит вправо перед суммированием с каждым очередным знаком.

A.09-4 Структура байта условий доступа

Открывая для доступа каждый очередной объект, обработчики прерываний

INT 21\AH=3Dh (8.02-33) и INT 21\AX=6C00h (8.02-78) принимают байт условий доступа и записывают его в ячейку со смещением 02h в блоке описания, создаваемом для данного объекта в составе таблицы SFT (A.01-4). Структура байта условий доступа показана в приведенной ниже таблице.

Бит

Значение

 

1-0

Цели доступа:

 

00b

только для считывания

 

01b

только для записи

 

10b

для записи и считывания

 

11b

для пересылки и исполнения

2Не корректировать время последнего доступа

3= 0b (резервировано)

– 644 –

Приложение А.09: Структуры данных для файлов и каталогов

Продолжение таблицы А.09-4

 

 

6-4

Условия разделенного (совместного) доступа:

 

 

000b

обеспечить режим совместимости

 

 

001b

запретить совместный доступ

 

 

010b

запретить запись другим программам

 

 

011b

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

 

 

100b

предоставить все права другим программам

 

7

Право доступа не наследуется дочерними процессами.

Примечание 1: условия совместного доступа принимаются во внимание только если загружена резидентная программа SHARE.EXE.

Примечание 2: при работе в предыдущих версиях DOS бит 2 должен быть сброшен в нуль.

A.09-5 Неоткрытые блоки управления файлами

Блоки управления файлами (FCB = File Control Block) представляют собой устаревшую форму спецификации, не обеспечивающую доступа за пределами "текущего" каталога и непригодную для открытия файлов на дисках с файловой системой FAT-32. Однако форма блока FCB используется рядом операций не для доступа к файлам, а просто как шаблон при поиске объектов, при их переименовании и удалении. Такие операции (INT 21\AH=11h, 12h, 13h, 17h) успешно применяют по отношению к объектам, находящимся в текущем каталоге, в том числе на дисках с файловой системой FAT-32. Для этого полная ("открытая") форма блоков FCB не нужна, достаточно частично заполненных "неоткрытых" блоков FCB, структура которых показана в приведенной ниже таблице.

MS-DOS7 допускает два варианта блоков FCB: обычные длиной до 36 байт и расширенные, длиной до 43 байт. Обычные блоки FCB применимы только к файлам, не имеющим атрибутов H (скрытый) и S (системный). Расширенные блоки FCB отличаются меткой FFh в первом байте. Они позволяют указать атрибуты объектов поиска и потому применимы не только к любым файлам, но также к меткам тома и к подкаталогам. Различия между обычными и расширенными блоками FCB имеются и у их "неоткрытых" форм. Колонка "N" приведенной ниже таблицы показывает размещение данных в неоткрытых обычных блоках FCB, а колонка "E" – в неоткрытых расширенных блоках FCB. В те байты блока FCB, которые в таблице не упомянуты, должно быть записано значение 00h.

N

E

Длина

Содержание

 

00h

1

= FFh – признак расширенного блока FCB

 

06h

1

Спецификация атрибутов (A.09-2) для поиска

00h

07h

1

Номер логического диска (примечание 1 к 8.02-17)

01h

08h

8

Имя или маска имени объекта (примечание 1)

– 645 –

Приложение А.09: Структуры данных для файлов и каталогов

Продолжение таблицы А.09-5

09h

10h

3

Суффикс или маска суффикса (примечание 1)

0Ch

13h

1

При возврате: атрибуты поиска (из байта 06h)

0Dh

14h

2

При возврате: номер записи об объекте в каталоге

0Fh

16h

2

При возврате: номер кластера текущего каталога

11h

18h

8

При вызове INT 21\AH=17h: новое имя

15h

1Ch

1

При возврате: номер диска (01h=A:, 03h=C:, и т.д.)

19h

20h

3

При вызове INT 21\AH=17h: новый суффикс

Примечание 1: в FCB все строчные буквы имени и суффикса надо заменять заглавными. Имя дополняется пробелами (20h) до номинальной длины 8 байт, суффикс до длины 3 байта. В незаполненных блоках FCB поля имени и суффикса содержат только пробелы. Все

перечисленные и некоторые другие требования к заполнению полей FCB будут строго соблюдены, если для формирования FCB воспользоваться функцией INT 21\AH=29h (8.02-19)

Примечание 2: при первом вызове всех функций, кроме INT 21\AH=17h, поля после 0Bh в обычном FCB и после 12h в расширенном FCB должны быть заполнены значением 00h. Функции поиска возвращают в этих полях данные, которые надо передавать от предшествующего вызова к следующему. Функция INT 21\AH=17h принимает из тех

же полей новое имя для переименовываемого файла и требует буфера длиной 28 байт для обычного FCB и 35 байт для расширенного FCB.

Примечание 3: неоткрытые блоки FCB не подвержены ограничению, налагаемому спецификацией команды FCBS (4.10) в файле Config.sys.

A.09-6 Канонизированный формат записи для каталогов диска CD-ROM

Структуры каталогов в оптических дисках форматов High Sierra и ISO 9660 несколько отличаются, но функция INT 2F\AX=150Fh (8.03-19) приводит обе структуры к единому канонизированному виду, который показан в приведенной ниже таблице.

Смещение

Длина

Содержание

00h

1

Длина области признаков в логических блоках

01h

4

Номер начального логического блока файла

05h

2

Размер файла в логических блоках

07h

4

Длина файла в байтах

0Bh

7

Дата и время

12h

1

Флаги

13h

1

Интервал перемежения (только для файлов AVI)

14h

1

Фактор пропуска перемежения (только для AVI)

 

 

– 646 –

Приложение А.09: Структуры данных для файлов и каталогов

Продолжение таблицы А.09-6

15h

2

Номер последовательности установки тома

17h

1

Длина имени файла

18h

38

Имя файла, оканчивающееся байтом 00h

3Eh

2

Номер версии файла

40h

1

Число байтов в системном блоке данных

41h

220

Системный блок данных

A.10 Таблицы данных для видеосистемы

A.10-1 Некоторые видеорежимы

Видеорежимы определяют способы формирования изображений, воспроизводимых на экране дисплея. Системы BIOS и DOS обычно выводят свои данные в текстовых видеорежимах: цветном видеорежиме 03h или монохромном видеорежиме 07h. Каждой программе предоставлена возможность установить наиболее подходящий видеорежим, текстовый или графический.

Круг реализуемых видеорежимов, конечно, зависит от оборудования компьютера. Некоторые видеорежимы получили широкое распространение и стали базой для обеспечения совместимости аппаратных средств. В приведенной ниже таблице показаны только такие видеорежимы, которые почти наверняка поддерживаются любой современной видеокартой. Но устаревшие видеокарты с

небольшим объемом памяти не поддерживают графические видеорежимы с высокой разрешающей способностью. Компьютеры, выпущенные до 1991 года, вообще не поддерживают все видеорежимы SVGA.

Видеорежимы EGA и VGA обозначают однобайтовым кодом, указанным в первой колонке приведенной ниже таблицы. Такие видеорежимы используют

фиксированное расположение видеобуфера в адресном пространстве памяти компьютера, показанное в 5-й колонке таблицы. Установить такие видеорежимы можно с помощью INT 10\AH=00h (8.01-10).

Видеорежимы SVGA обозначают двухбайтовым шестнадцатеричным кодом, записываемым в регистр BX перед вызовом процедуры смены видеорежима INT 10\AX=4F02h (8.01-37). В приведенной ниже таблице старший полубайт кода видеорежимов SVGA не указан, потому что в нем 12-й и 13-й биты должны быть нулевыми, 14-й бит разрешает прямое обращение к кадровому буферу, а 15-й бит запрещает сброс видеопамяти при переключении видеорежима. Например, Вы можете задать BX=0102h, если хотите, чтобы видеопамять была обнулена, или можете задать BX=8102h, если хотите, чтобы содержимое видеопамяти было бы сохранено, но в обоих случаях будет установлен один и тот же видеорежим,

– 647 –

Приложение А.10: Таблицы данных для видеосистемы

который обозначен как 102h в первой колонке приведенной ниже таблицы. Другие видеорежимы SVGA обозначены аналогичным образом без указания старшего полубайта. Если с помощью той же процедуры INT 10\AX=4F02h Вам предстоит установить видеорежим EGA или VGA, то надо будет задать состояния битов 14 и 15 регистра BX согласно их роли, в младший байт регистра BX записать код устанавливаемого видеорежима, а остальные биты 8 – 13 обнулить.

В 3-й колонке приведенной ниже таблицы текстовые видеорежимы характеризованы числом знакомест в ряду и числом рядов знаков на экране. Например, цифры 80x25 в 3-й колонке означают, что Вы можете адресовать ряды 0 – 24 и знакоместа 0 – 79 в каждом ряду. Графические видеорежимы характеризуются числом строк и разрешающей способностью в пикселах, показанными в 4-й колонке. Например, разрешающая способность 640x480 означает, что Вы можете обращаться к строкам 0 – 479 и к пикселам 0 – 639 в каждой строке. Монохромные видеорежимы, как текстовые, так и графические, помечены во второй колонке таблицы значением "b/w".

Видеорежим

Цвета

Текст

Графика

Адрес

Класс

01h

16

40x25

 

B800

VGA

03h

16

80x25

 

B800

VGA

06h

b/w

 

640x200

B800

EGA,VGA

07h

b/w

80x25

 

B000

VGA

0Eh

16

 

640x200

A000

EGA,VGA

0Fh

b/w

 

640x350

A000

EGA,VGA

10h

16

 

640x350

A000

VGA

11h

b/w

 

640x480

A000

VGA

12h

16

 

640x480

A000

VGA

13h

256

 

320x200

A000

VGA

100h

256

 

640x400

*1

SVGA

101h

256

 

640x480

*1

SVGA

102h

16

 

800x600

*1

SVGA

103h

256

 

800x600

*1

SVGA

104h

16

 

1024x768

*1

SVGA

105h

256

 

1024x768

*1

SVGA

108h

16

80x60

 

*1

SVGA

109h

16

132x25

 

*1

SVGA

10Ah

16

132x43

 

*1

SVGA

10Bh

16

132x50

 

*1

SVGA

10Ch

16

132x60

 

*1

SVGA

110h

32k

 

640x480

*1

SVGA

111h

64k

 

640x480

*1

SVGA

112h

16M

 

640x480

*1

SVGA

– 648 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]