рамме начальной загрузки. По описанию операционной системы MS-DOS
версии 2.00 27 байтов записи начальной загрузки, расположенные
между начальной командой перехода и программой начальной загруз-
ки, содержат информацию о формате диска. Обращаясь к этой группе
данных, программы могут получить почти всю информацию по формати-
рованию, необходимую для диска. В таблице 11-1 представлено со-
держимое блока информации о форматировании находящегося в записи
начальной загрузки.
Информация о форматировании в записи начальной загрузки мо-
жет оказаться очень нужной при определении формата диска. Запись
начальной загрузки исходно создается, когда диск форматируется
командой FORMAT (для гибких дисков) или командой FDISK (для жест-
ких дисков). Часть информации о форматировании в записи начальной
загрузки под названием "OEM and Version" ("Фирма-изготовитель
комплектующего оборудования и версия") обычно содержит номера
версии и реализации использовавшейся операционной системы MS-DOS
для создания записи начальной загрузки. Если, например, версия
3.3 операционной системы IBM-DOS использовалась для форматирова-
ния диска это поле будет содержать информацию "IBM 3.3". Осталь-
ные элементы информации по форматированию из записи начальной
загрузки представляют собой набор (надмножество) из блока пара-
метров BIOS (блок ВРВ) (см. главу 6), поскольку он уже существо-
вал, во время форматирования диска.
Последние три элемента информации о форматировании (коли-
чество секторов на треке, количество головок и количество скры-
тых) секторов определяются расчетным путем и эти данные вставля-
ются в запись начальной загрузки в процессе форматирования диска.
Программа READFMT, представленная листингом 11-1, содержит
описание способа, при помощи которого информация о форматировании
из записи начальной загрузки считывается с диска и отображается
на экране дисплея. Кроме элементов форматирования, которые при-
сутствуют в записи начальной загрузки, программа READFMT также
осуществляет расчет нескольких других элементов, относящихся к
форматированию, таких как общая системная память, общая память
данных и общая емкость дисков. Программа READFMT отображает полу-
ченные результаты на экране дисплея.
- 11-11 -
Таблица 11-1
Информация по форматированию, содержащаяся в
записи начальной загрузки
ДДДДДДДДВДДДДДДДДДДДВДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Смещение¦ Смещение ¦ ¦
(деся- ¦(шестнадца-¦ Размер ¦ Содержание поля
тичное) ¦ тиричное) ¦ ¦
ДДДДДДДД†ДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
0 ¦ 00 ¦3 байта ¦Ближний переход к программе
¦ ¦ ¦начальной загрузки
ДДДДДДДД†ДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
3 ¦ 03 ¦8 байтов¦Название фирмы-изготовителя ¦
¦ ¦ ¦оборудования и его версия И ¦
ДДДДДДДД†ДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДД¬ Н ¦
11 ¦ 0B ¦1 слово ¦Количество байтов Б ¦ Ф ¦
¦ ¦ ¦в секторе Л ¦ О Ф¦
13 ¦ 0D ¦1 байт ¦Количество секторов О ¦ Р О¦
¦ ¦ ¦в кластере К ¦ М Р¦
14 ¦ 0E ¦1 слово ¦Число зарезервиро- B¦ А М¦
¦ ¦ ¦ванных секторов П I¦ Ц А¦
16 ¦ 10 ¦1 байт ¦Количество таблиц А O¦ И Т¦
¦ ¦ ¦FAT Р S¦ Я И¦
17 ¦ 11 ¦1 слово ¦Количество элементов А ¦ Р¦
¦ ¦ ¦в каталоге М ¦ П О¦
19 ¦ 14 ¦1 слово ¦Количество логичес- Е ¦ О В¦
¦ ¦ ¦ких секторов Т ¦ А¦
21 ¦ 15 ¦1 байт ¦Байт описателя среды Р ¦ Н¦
22 ¦ 16 ¦1 слово ¦Количество секторов О ¦ И¦
¦ ¦ ¦таблицы FAT В ¦ Ю¦
ДДДДДДДД†ДДДДДДДДДДД†ДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
24 ¦ 18 ¦1 слово ¦Количество секторов в треке ¦
26 ¦ 1A ¦1 слово ¦Количество головок ¦
28 ¦ 1С ¦1 слово ¦Количество скрытых секторов ¦
ДДДДДДДД†ДДДДДДДДДДДБДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
30 ¦ 1E 416 байтов¦Программа начальной загрузки ¦
446 ¦ 1BE 16 байтов¦Информация о разделении ¦
¦ ¦ ¦памяти ¦
462 ¦ 1CE 50 байтов¦Остальная часть программы ¦
¦ ¦ ¦ начальной загрузки ¦
ДДДДДДДДБДДДДДДДДДДДБДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
* Для операционной системы МS-DOS версий 2.Х = 3-байто-
вый переход
Для операционной системы МS-DOS версий 2.Х = 2-байтовый
короткий переход плюс операция NOP.
** Общее количество элементов в корневом каталоге.
*** Байты описателя среды не всегда являются действительны-
ми, как для операционной системы MS-DOS версии 2.0
**** Относится только к жестким дискам, содержащим таблицы
начальной загрузки; эта область не используется на гибких дисках.
- 11-12 -
Листинг 11-1. Программа READFMT
----------------------------------------------------------------
PAGE 50,132
TITLE READFMT.ASM/.EXE
.SALL ; подавить выдачу макрорасширений в программе
.8086 ; пользоваться только командами
; микропроцессоров 8086/8088
;*************************************************************
;** Программа READFMT Версии 1.00
;** Настоящая программа считывает сектор начальной заг-
;** рузки с любого диска, расшифровывает обнаруженный в за-
;** писи начальной загрузки блок параметров BIOS(BPB),и вы-
;** водит на экран дисплея эту информацию и некоторую другую
;** расчетную информацию.
;**
;** Примечание: во время создания этой программы перек-
;** лючатель LINK "/СР:1" должен использоваться для того,
;** чтобы во время загрузки программы, ей распределялось бы
;** действительно нужное количество памяти. По умолчанию
;** максимальным объемом распределяемой памяти в том случае,
;** когда "/СР:1" не задан, является вся память выше точки
;** загрузки программы, что вызывает завершение программы с
;** выдачей сообщения об ошибке, потому что она не в состоя-
;** нии сделать дополнительное перераспределение памяти во
;** время своей работы.
;*************************************************************
;
; СОСТАВ:
INCLUDE stdequ.inc ; включить стандартный файл равенств
INCLUDE stdmac.inc ; включить стандартный файл макросов
INCLUDELIB stdlib.lib ; включить стандартную библиотеку
; STDLIB.LIB во временное редакти-
; рование
;
; Заявки на программы обращения к внешним библиотекам,
; находящиеся в STDLIB.LIB
EXTRN dosv2con:NEAR ; получить и вывести на экран текущую
; версию DOS
EXTRN dosver:NEAR ; дать текущую версию DOS
EXTRN bin2dec2:NEAR ; вывести на экран дисплея DX:AX в
; десятичных цифрах кода ASCII
; (если регистр DX=), регистр AX
; считается беззнаковым
;
; - - - - - - ИНИЦИАЛИЗАЦИЯ - - - - - - - - - - - - - - - - - -
;
.MODEL SMALL ; малая модель
.STACK 2048 ; создать 2-Кбайтовый стек
;
;*************************************************************
; ГЛАBHАЯ ПРОГРАММА
;
.DATA
;
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Cсылки и обращения к компонентам записи начальной заг-
; рузки, считанной с диска и помещенный в блок памяти, осу-
- 11-13 -
; ществляются при помощи ES. Обращения производятся только
. компонентам блока "Блок параметров BIOS"(BPB); первые три
; байта и все данные расположенные после области блока ВРВ
; записи начальной загрузки, игнорируются.
;
bootrecord STRUC
BootJump db 3 DUP (?) ; исходная команда перехода
OEMstring db 8 DUP (?) ; фирма-изготовитель и версия
; операционной системы MS-DOS
SectorBytes dw ? ; количество байтов в секторе
ClusterSec db ? ; количество секторов в кластере
ReservedSec dw ? ; зарезервированные сектора
FATcopies db ? ; количество копий таблицы FAT
DirEntries dw ? ; количество элементов в
; корневом каталоге
TotalSectors dw ? ; общее количество секторов
; диска (100% диска)
MediaDescrip db ? ; описатель среды
FATsectors dw ? ; количество секторов, занятых
; одной таблицей FAT
TrackSectors dw ? ; количество секторов в треке
Heads dw ? ; количество головок
HiddenSectors dw ? ; количество скрытых секторов
bootrecord ENDS
;
.CODE
;
; Cохранение локальных данных (храните эти определения
; в сегменте программы)
;
DSsave dw seg DGROUP ; память для регистра DS
;
.DATA
PSPseg dw ? ; сегмент PSP (Префикс про-
; граммного сегмента)
.CODE
main PROC NEAR ; начало основного процесса
;
;***********************************************************
; ЗАПУСК ПРОГРАММЫ
;***********************************************************
mov ds,DSsave ; инициализация DS
mov ax,es ; получить адрес сегмента PSP
mov word ptr PSPseg,ax ; ....... и сохранить его
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; Bывести на экран дисплея сообщение о запуске
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@DisStr Start1_Msg ; вывести на экран дисплея
; сообщение о запуске