ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



ГЛАВА  3  ТЕХНИЧЕСКАЯ ИНФОРМАЦИЯ ПО MS-DOS
     __________________________________________________________

     3.1   Введение
     3.2   Инициализация MS-DOS
     3.3   Командный процессор
     3.4   Выделение дискового пространства
     3.5   Дисковый каталог MS-DOS
     3.6   Таблица размещения файлов (FAT)
     3.6.1   Использование FAT (12-битовые элементы)
     3.6.2   Использование FAT (16-битовые элементы)
     3.7   Стандартные форматы диска MS-DOS
     __________________________________________________________



     3.1 Введение

     В   этой  главе  приводится  описание  порядка  выделения
дискового пространства корневому каталогу, таблице  размещения
файлов  и  области данных. Для программистов, пишущих драйверы
устройств,  глава  дает  подробную  информацию   по   дисковым
каталогам  MS-DOS  и  FAT.  Стандартные  форматы гибких дисков
приводятся в таблицах 3.1 и 3.2.

     3.2 Инициализация MS-DOS

     Инициализация MS-DOS производится в несколько этапов. При
включении питания или сбросе, управление передается БСВВ  ПЗУ,
которая   выполняет   тестирование   аппаратной   части  и  ее
инициализирование. После  этого  БСВВ  ищет  сектор  начальной
загрузки  в  дисководе  А.  Если  таковой  там  есть,  то БСВВ
считывает его в память и передает ему управление. Если нет, то
аналогичный поиск осуществляется в активном  разделе  жесткого
диска.   Если   и  там  нет  сектора  начальной  загрузки,  то
управление передается БЕЙСИКУ, входящему в состав ПЗУ.
     На гибких дисках (3.5, 5.25 и 8-дюймовые дискеты)  сектор
начальной  загрузки  всегда находится на дорожке 0, секторе 1,
стороне 0. На жестких дисках он всегда  начинается  с  первого
сектора  раздела  MS-DOS,  и  включает,  кроме  того,  таблицу
разделов, идентифицирующую активный раздел.
     После  этого  загруженный  сектор   считывает   с   диска
следующие файлы в указанном порядке:

     io.sys
     msdos.sys

     __________________________________________________________
     Примечание
               В версиях системы до 3.3 файл io.sys должен был
               быть непрерывным. Теперь это не требуется.
     __________________________________________________________


                             - 218 -


     Следующим этапом является загрузка прцедурой sysinit всех
резидентных  драйверов.  После загрузки, эта процедура ищет на
системном диске файл config.sys и выделяет память для  буферов
и  файлов,  в  зависимости  от  указанных  (или  по умолчанию)
в config.sys параметров. Если в config.sys указаны загружаемые
драйверы, то они загружаются следующими.
     Последним загружается командный процессор  command.com  с
передачей ему управления.

     3.3 Командный процессор

     Командный процессор command.com состоит из трех частей:
  -  Резидентная  часть помещается в памяти сразу за msdos.sys
и его областью данных.  Она  включает  процедуры  обслуживания
прерываний   22Н,  23Н  и  24Н,  а  также  процедуру  загрузки
транзитной части, при необходимости. Все  процедуры  обработки
стандартных ошибок MS-DOS выполняются этой частью command.com.
Сюда входят вывод сообщений об ошибках и запрос пользователю -
Прервать, Повторить, Снять, Игнорировать.
  -  Инициализирующая  часть следует за резидентной частью. Во
время загрузки системы ей передается управление. Она  содержит
процедуру   установки   процессора   в   файле   autoexec.bat.
Инициализирующая  часть  определяет   сегментный   адрес,   по
которому могут быть загружены программы, и, т.к. она больше не
нужна,  затирается  первой  программой,  загружаемой командным
процессором.
  - Транзитная  часть  загружается  в  конец  памяти  (старшие
адреса).  Она  содержит  процессоры  всех  внутренних команд и
интерпретатор пакетного файла.
     Транзитная часть  выдает  системную  подсказку ( например
А>  ), считывает команды с клавиатуры (или из пакетного файла)
и обеспечивает их выполнение. Для внешних команд, она  создает
командную строку, вызывает функцию 4ВН (Загрузить и выполнить
программу) и передает управление загруженной процедуре.


     3.4 Выделение дискового пространства

     Дисковое  пространство,  размеченное  для работы в MS-DOS
имеет следующий формат:

     1. Зарезервированная область - переменного размера
     2. Первая копия FAT          - переменного размера
     3. Дополнительные копии FAT  - переменного размера
         (необязательно)
     4. Корневой каталог          - переменного размера
     5. Область файлов данных

     Пространство для файлов данных не выделяется заранее. Оно
выделяется каждый раз по одному кластеру. Кластер  состоит  из
одного  или  нескольких  последовательных секторов (количество
секторов  должно  быть  степенью  двойки).   Размер   кластера
устанавливается  во  время форматирования. Все кластеры одного
файла связаны одной цепочкой в FAT (см.  Раздел  3.6).  Обычно
MS-DOS  хранит  две  копии FAT, за исключением случая, когда в
оперативной памяти создается виртуальный ( моделируемый) диск.
Если происходит сбой в FAT, то MS-DOS считывает  вторую  копию
FAT.

                             - 219 -



     3.5 Дисковый каталог MS-DOS

     Утилита  format  создает корневой каталог на всех дисках.
Размещение каталога на диске  и  максимальное  количество  его
элементов  зависит от диска. Стандартные форматы гибких дисков
приводятся в конце этой главы. Обратите внимание на то, что  в
отличии от корневых каталогов, каталоги рассматриваются MS-DOS
как  файлы,  поэтому  нет  ограничений  на  количество файлов,
содержащихся в подкаталогах корневого каталога.
     Длина  каждого  элемента  каталога - 32 байта в следующем
формате (смещения даны в шестнадцатеричной форме):

     Байт    Значение
     __________________________________________________________
     0-7     Имя файла. Восемь символов, выравненных по левому
             краю и дополненных  (если  необходимо)  пробелами
             справа. Первый байт идентифицирует состояние файла
             следующим образом:

              1-ый Байт  Состояние
                   ____________________________________________
                   00Н   Элемент никогда не использовался
                         (для ускорения поиска)
                   05Н   Первым символом файла является Е5Н
                   2ЕН   Элемент для каталога.    Если второй
                         байт тоже   равен   2ЕН,   то   поле
                         кластера   содержит  номер  кластера
                         родительского каталога (0000Н,  если
                         родительским    является    корневой
                         каталог). В противном  случае  байты
                         01Н-0АН   суть   пробелы,   а   поле
                         кластера  содержит  номер   кластера
                         этого каталога.
                   Е5Н   Файл использовался, но был удален.
                   Любой другой символ рассматривается, как пер-
                         вый символ имени файла.
                   ____________________________________________
     8-А     Расширение имени файла
     0-В     Атрибут файла. Имеет следующий формат:

                   Байт  Значение
                   ____________________________________________
                   01Н   Только для чтения.   Попытка открыть
                         файл для  записи функцией 3DH вернет
                         ошибку.    Этот    атрибут     может
                         использоваться   наряду   с  другими
                         атрибутами.  Попытка  удалить   файл
                         функцией    13Н   также   закончится
                         неудачей.
                   02Н   Скрытый файл. Исключен из обычных
                         процедур поиска.
                   04Н   Системный файл. Исключен из обычных
                         процедур поиска.
                   08Н   Элемент содержит метку тома в первых
                         11 байтах. Он  не содержит больше
                         полезной информации, за исключением
                         даты и времени создания,  и   может
                         существовать лишь в корневом катало-
                         ге.

                             - 220 -


                   10Н   Элемент описывает подкаталог и исклю-
                         чается из обычных процедур поиска.
                   20Н   Архив. Устанавливается, если файл
                         изменялся (в него делалась запись с
                         последующим закрытием).
                   Примечание:
                         Системные файлы имеют атрибуты Только
                         для чтения, Скрытый и Системный.
                         Атрибуты могут быть изменены функцией
                         43Н (Получить/установить атрибуты фай-
                         ла).
                   ____________________________________________
     0С-15   Зарезервировано
     16-17   Время создания или последнего изменения файла:

t1             смещение 17Н                    0
             і ч і ч і ч і ч і ч і м і м і м і

             смещение 16Н                    0
             і м і м і м і с і с і с і с і с і

             где:

             Ч - кол-во часов в двоичной форме (0-23)
             М - кол-во минут в двоичной форме (0-59)
             С - кол-во двухсекундных инкрементов
                 в двоичной форме

     18-19   Дата создания или последнего изменения файла:

             смещение 19Н                    0
             і г і г і г і г і г і г і г і м і

             смещение 18Н                    0
             і м і м і м і д і д і д і д і д і
t0
             где:
             Г - год, 0-119 (1980-2099)
             М - месяц (1-12)
             Д - день (1-31).

     1А-1В   Начальный кластер; номер первого кластера файла.
                   - первый кластер области данных на всех
                     дисках имеет номер 002.
                   - при хранении номера кластера, младший
                     байт всегда первый.
                   - порядок преобразования номеров кластеров
                     в номера логических секторов описан в
                     разделах 3.6.1 и 3.6.2.
     1С-1F   Размер файла в байтах. Первым идет младшее слово.
     __________________________________________________________


     3.6 Таблица размещения файлов (FAT)

     Программы  должны использовать стандартные функции MS-DOS
при работе с файлами. Программам, имеющим  доступ  к  FAT,  не
гарантируется  совместимость  с последующими версиями системы.
Ниже  приводится  информация  для   программистов,   создающих
загружаемые драйверы устройств.

                             - 221 -


     FAT  представляет  собой  массив  12-битных  (1,5  байта)
элементов, адресующих кластеры диска. На дисках  с  более  чем
4085 кластерами, используются 16-битные элементы.
     Первые  два  элемента  зарезервированы,  однако  драйверы
могут использовать первый байт для идентификации  диска  (байт
FAT  ID).  Для  жестких  дисков этот байт равен F8H. Подробная
информация дана в таблицах в конце главы.
     Третий элемент FAT содержит номер кластера начала области
данных  (002).  Запись  на  диск   выполняется   необязательно
последовательно.  То  есть,  кластеры  выделяются  по  одному,
причем система перепрыгивает через кластеры, которые  она  уже
выделила.  Первый  свободный  кластер,  следующий за последним
выделенным для файла, будет  следующим  выделенным  кластером,
независимо  от  его  физического  расположения на диске. Таким
образом, при удалении файла  просто  освобождаются  выделенные
ему кластеры.
     Каждый    элемент    FAT    содержит   три   или   четыре
шестнадцатеричные цыфры, в зависимости от размера элемента:

     Величина      Значение
     __________________________________________________________
     (0)000        Свободный кластер.
     (F)FFF        Плохой кластер (не включен в цепочку
                   кластеров).  Команда  chkdsk   подсчитывает
                   количество таких кластеров.
     (F)FF8-FFF    Последний кластер файла.
     (Х)ХХХ        Любое другое значение является номером
                   следующего  кластера  файла.  Номер первого
                   кластера файла заносится в соответствующее
                   поле элемента (входа) каталога.
     __________________________________________________________

     Таблица  размещения  файлов  всегда  начинается с первого
сектора сразу после зарезервированных  секторов.  Если  размер
FAT  превыщает  размер сектора, то занимаемые сектора смежные.
Операционная система обычно записывает две копии FAT.  Система
считывает  FAT  в  один из своих буферов при операциях чтения,
записи,  открытия  и  т.п..  Этому  буферу придается наивысший
приоритет  при  хранении в оперативной памяти, по возможности,
максимально долго.

     3.6.1 Использование FAT ( 12-битные элементы )

     Начальный  кластер  файла  указан  в  каталоговом   входе
(элементе).  Для  определения  последующих  кластеров следуйте
следующей процедуре:

     1. Умножить номер кластера на  1,5  (каждый  элемент  FAT
имеет длину 1,5 байта).
     2. Результатом будет смещение в FAT элемента, содержащего
номер следующего кластера файла.
     3.  Командой MOV загрузите слово по вычесленному смещению
в один из регистров.
     4. Если последний использовавшийся  кластер  имел  четный
номер, вычлените младшие 12 бит регистра командой AND рег,0FFFH.
Если этот  номер  был  нечетным, то вычлените  старшие 12 бит
регистра  сдвигом вправо на четыре бита командой SHR.
     5. Если результат окажется равным 0FF8H-0FFFH, то файл не
содержит  больше  кластеров.  В противном  случае,  полученный
результат является номером следующего кластера файла.

                             - 222 -


     Для преобразования номера кластера  в  номер  логического
сектора (относительного сектора) следуйте следующей процедуре:

     1. Вычесть два из номера кластера.
     2. Умножить результат на количество секторов в кластере.
     3. Прибавить  к  результату  номер  логического  сектора
        начала области данных.

     3.6.2 Использование FAT с 16-битными элементами

     Начальный кластер файла указан в элементе каталога. Далее
нужно выполнить следующие операции:

     1. Умножить номер кластера на два (каждый элемент таблицы
        два байта).
     2. Загрузить в один из регистров  слово  по  вычесленному
        смещению в FAT командой MOV.
     3. Если  результат  равен  0FFF8H-0FFFH,  то  файлу  не
        принадлежат больше  кластеры.  В  противном  случае  в
        регистре содержится номер следующего кластера файла.

     3.7 Стандартные форматы диска MS-DOS

     Кластеры  данных  на  диске  организованы системой таким
образом, чтобы минимизировать перемещения головки.  То  есть,
дисковое  пространство  выделяется системой сначала полностью
на одной дорожке, и  лишь  затем  осуществляется  переход  на
другую.  При  этом  используются  последовательные сектора на
головке с наименьшим номером, сектора на следующей головке  и
т.д., пока не будут использованы все сектора на всех головках
дорожки.
     Размер  раздела MS-DOS на жестком диске определяет размер
FAT   и   корневого   каталога.   Форматы    гибких    дисков,
представленные  в  таблицах  3.1 и 3.2 являются стандартными и
должны быть понятны соответствующему стандартному драйверу.

          Таблица 3.1
t1     Стандартные форматы гибких дисков MS-DOS
     ___________________________________________________________
                            і      Размер диска в дюймах
           Параметры        і___________________________________
                            і 5.25                8
     _______________________і___________________________________
t0     WORD кол-во головок      1   1   2   2       1    2    1
     Дорожек на стороне       40  40  40  40      77   77   77
     WORD сектора/дорожка     8   9   8   9       26   26   8
     WORD байты/сектор        512 512 512 512     128  128  024
     BYTE сектора/кластер     1   1   2   2       4    4    1
     WORD зарезерв. сектора   1   1   1   1       1    4    1
     BYTE кол-во FAT          2   2   2   2       2    2    2
     WORD кол-во элементов    64  64  112 112     68   68   192
          корневого каталга
     WORD кол-во секторов     320 360 640 720     2002 2002 616
     BYTE описатель диска     FE  FC  FF  FD      *FE  FD   *FE
     WORD сектора/FAT         1   2   1   2       6    6    2
     WORD кол-во скрытых      0   0   0   0       0    0    0
          секторов
     __________________________________________________________
     *  Совпадение  этих значений не является опечаткой. Если
при чтении диска с  нормальной  плотностью  будет  возвращена
ошибка, то диск имеет двойную плотность.

                             - 223 -




          Таблица 3.2
     Стандартные   форматы   гибких   дисков  MS-DOS  (высокой
     плотности).
t1     ___________________________________________________________
                            і      Размер диска в дюймах
           Параметры        і___________________________________
                            і 3.5 или 5.25          3.5    5.25
     _______________________і___________________________________
t0     WORD кол-во головок      1   2   2    2         2     2
     Дорожек на стороне       80  80  80   80        80    80
     WORD сектора/дорожка     8   9   8    9         18    15
     WORD байты/сектор        512 512 512  512       512   512
     BYTE сектора/кластер     2   2   2    2         1     1
     WORD зарезерв. сектора   1   1   1    1         1     1
     BYTE кол-во FAT          2   2   2    2         2     2
     WORD кол-во элементов    112 112 112  112       224   224
          корневого каталга
     WORD кол-во секторов     640 720 1280 1440      2880  2400
     BYTE описатель диска     FA  FC  FB   F9        *F0   F9
     WORD сектора/FAT         1   2   2    3         9     7
     WORD кол-во скрытых      0   0   0    0         0     0
          секторов
     __________________________________________________________
     * Значение F0H может использоваться для описания других
       типов дисков.


                             - 224 -


     __________________________________________________________

                             ГЛАВА 4

             УПРАВЛЯЮЩИЕ БЛОКИ И РАБОЧИЕ ОБЛАСТИ MS-DOS

     __________________________________________________________

     4.1 Введение
     4.2 Типичная карта памяти MS-DOS
     4.3 Программный сегмент MS-DOS

     __________________________________________________________

     4.1 Введение

     В  этой  главе  приводится описание карты памяти, порядка
загрузки программ в оперативную память, структуры программного
сегмента и содержания сегментных регистров для файлов  .exe  и
.com.

     4.2 Типичная карта памяти MS-DOS
t1
     __________________________________________________________
     і                  ПЗУ и видео буферы                    і
     і________________________________________________________і
     і             Транзитная часть COMMAND.COM               і
     і________________________________________________________і
     і                                                        і
     і                                                        і
     і                                                        і
     і               Область транзитных программ              і
     і        ..........................................      і
     і                                                        і
     і                                                        і
     і               Внешние команды и утилиты                і
     і________________________________________________________і
     і             Резидентная часть COMMAND.COM              і
     і________________________________________________________і
     і   Буферы, управляющие области MS-DOS  и  загружаемые   і
     і   драйверы                                             і
     і________________________________________________________і
     і                     MSDOS.SYS                          і
     і________________________________________________________і
     і        IO.SYS  и  резидентные драйверы устройств       і
     і________________________________________________________і
     і            Таблица векторов прерываний                 і
   0 і________________________________________________________і
t0
     Порядок  загрузки  системы  и  ее  инициализации подробно
описан в Разделе 3.2. Внешние команды и утилиты (.exe и  .com)
загружаются  в область транзитных программ. Кроме того, MS-DOS
выделяет 256 байт пользовательского  стэка  для  .com  файлов.
Память    пользователю    выделяется    с    наименьших,    но
удовлетворяющих запросу доступных адресов.

                             - 225 -



     4.3 Программный сегмент MS-DOS

     При вводе внешней команды или вызове функции  4ВН  MS-DOS
определяет   наименьший  доступный  адрес  памяти,  начиная  с
которого  будет  загружен  программный  файл.  Участок памяти,
начинающийся с этого адреса, называется программным сегментом.
     Впереди  программ,  загружаемых  функцией  4ВН, создается
префикс сегмента кодов  (префикс  программного  сегмента)  PSP
размером   256  байт.  Сама  программа  загружается  вслед  за
префиксом. EXE-файл с установленными в 0 полями максимально  и
минимально  запрашиваемой памяти в заголовке файла загружается
в самые, по возможности, старшие адреса.
     Управляющий  блок  PSP  имеет  смещение  0.  Возврат   из
программ  может быть осуществлен пятью методами:

     - Прерыванием 21Н при АН = 4СН;
     - Прерыванием 21Н при АН = 31Н;
     - Дальним  переходом  (jmp  far)  на смещение 0 префикса
       программного сегмента;
     - Прерыванием 20Н при CS, содержащим сегментный адрес PSP;
     - Прерыванием 21Н при АН = 0 и CS, содержащим сегментный
       адрес PSP.

     __________________________________________________________
     Примечание
               Для обеспечения совместимости с последующими
               версиями  системы  первые   два   метода   более
               предпочтительны.
     __________________________________________________________

     Все пять методов передают управление программе, вызвавшей
функцию   4ВН.   Первые   два   возвращают  код  завершения  и
восстанавливают вектора прерываний 22Н, 23Н и 24Н из значений,
сохраненных  в PSP. Управление затем передается по вектору 24Н.
     Если  программа возвращается в command.com, то управление
передается его  резидентной  части.  Если  программа  является
пакетным  файлом  (в  процессе  выполнения),  то  продолжается
выполнение пакетного файла.  В  противном  случае  command.com
выполняет  проверку  резидентной части по контрольной сумме и,
при  необходимости,   перезагружает   ее,   выдает   системное
приглашение и ждет ввода новой команды.
     При  получении  программой  управления,  вступают  в силу
следующие соглашения:

     1. Для всех программ

     - Сегментный адрес среды передается через PSP (смещение в
       PSP 2СН).
     - Среда представляет собой последовательность строк ASCII
       (при общей длине не более 32К) следующего формата:

       ИМЯ=параметр

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

                             - 226 -


       талоге,  то  эта  строка  содержит  дисковод  и маршрут
       выполняемой  программы.  В  противном  случае   функция
       присоединяет  имя  файла  к имени маршрута. Эта область
       может быть использована  программами  для  определения,
       были ли они загружены.
     - Среда,  создаваемая командным процессором, включает по
       крайней   мере   comspec=параметр   (используется   для
       определения  маршрута,  который  система использует для
       поиска  на  диске  command.com).  Кроме   того,   среда
       включает    параметры    команд    path    и    prompt,
       использовавшихся  последними,  и   среду,   создаваемую
       командой set.
     - Функция 4ВН передает копию среды родительской программы
       дочерней   программе.  Если  вы  хотите  оставить  свою
       программу резидентом, то вы должны отдавать себе  отчет
       в  том, что переданная вашей программе среда статична и
       не  изменится,  даже  если  в  последующем  вы  введете
       команды   set,   path   и   prompt.  Аналогично,  любые
       модификации   среды   дочерней   программы   никак   не
       отражаются на среде родительской программы.
     - Буфер обмена с диском имеет смещение 80Н в PSP. PSP со-
       держит блоки управления файлом со смещениями 5СН и 6СН.
       MS-DOS форматирует  эти  блоки,  используя  первые  два
       параметра, которые вы указываете при вводе команды.
     - Неформатная  область имеет смещение 81Н и содержит все
       символы, которые вы ввели после команды, причем байт со
       смещением 80Н содержит количество введенных символов.
       Символы переадресации ввода/вывода, параметры команды и
       имена файлов следующие за  ними  не  включаются  в  эту
       область,  т.к.  переадресация  прозрачна для прикладных
       программ.
     - Регистр АХ указывает, являются  ли  разрешенными  имена
       дисководов, указанные при вводе команды:
       AL=FF,  если  первый  параметр  указывает  недопустимый
       дисковод. Иначе AL=0.
       AH=FF,  если  второй  параметр  указывает  недопустимый
       дисковод. Иначе AH=0.
     - Слово со смещением 02 содержит сегментный адрес первого
       байта   недоступной   памяти.   Программа   не   должна
       модифицировать содержимое памяти за этим адресом, если,
       конечно, эта память не выделена функцией 48Н.

     2. Для .EXE программ

     - DS и ES содержат сегментный адрес PSP
     - CS, IP, SS и SP содержат значения, устанавливаемые при
       сборке программой Microsoft link.

     3. Для .COM  программ

     - Все  сегментные  регистры  содержат  сегментный  адрес
       выделенного участка памяти, начинающегося с управляющего
       блока PSP.
     - .COM программам выделяется вся пользовательская
       память, поэтому перед вызовом другой  программы  через
       функцию  4ВН,  необходимо  сузить  начально выделенную
       память   функцией   4АН   для   освобождения    памяти
       загружаемой программе.
     - IP равен 100Н.
     - Указатель стэка адресует конец программного сегмента.

                             - 227 -


     - На вершину стэка помещается слово нулей. Возврат в
       command.com может осуществляется инструкцией RET.

     Рис. 4.1  Префикс сегмента кодов

t1            Смещения даны в шестнадцатеричной форме.
     0_________________________________________________________
      і int 20H    і Конец участ.і 04Н  Зарезервировано       і
     8і____________і_____________і____________________________і
      і Зарезерв.  і Вектор прерывания 22Н   і Вектор прерыва-і
      і            і    ( IP, CS )           і ния 23Н (IP)   і
    10і____________і_________________________і________________і
      і            і Вектор прерывания 24Н   і                і
      і   (CS)     і    ( IP, CS )           і                і
      і____________і_________________________і                і
      і                                                       і
      і       Используется MS-DOS                             і
    5Сі_______________________________________________________і
      і Эта область форматируется как стандартный неоткрытый  і
      і FCB                                                   і
    6Сі_______________________________________________________і
      і Эта область форматируется как стандартный неоткрытый  і
      і FCB (перекрывается, если FCB 5CH открыт)              і
    80і_______________________________________________________і
      і Неформатная область ( по умолчанию буфер обмена  с    і
      і диском). Начально содержит хвост командной строки.    і
      і_______________________________________________________і
   100
t0
     __________________________________________________________
     Примечание
               Программы не должны изменять содержимое PSP до
               смещения 5СН.
     __________________________________________________________

                             - 228 -


     __________________________________________________________

                            ГЛАВА 5

                 ПОДДЕРЖКА НАЦИОНАЛЬНЫХ АЛФАВИТОВ

     __________________________________________________________

     5.1   Введение
     5.2   Функции поддержки национальных алфавитов
     5.3   Фонтовые файлы
     5.3.1   Структура фонтового файла

     __________________________________________________________


     5.1 Введение

                            Структура
     системы  поддержки  национальных  алфавитов  MS-DOS  4.0:

     - Страна-зависимая информация
     - Поддержка национальных клавиатур
     - Программные интерфейсы поддержки национальных алфавитов
     - Утилиты

     Страна-зависимая информация включает следующие компоненты:

     - Время, дата и валюта
     - Таблицы регистрового преобразования символов
     - Сравнительные таблицы для сортировки символов
     - Однобайтные символы, допустимые в именах файлов

     Система   обеспечивает   выбор    различных    клавиатур.
Программные   интерфейсы   MS-DOS   4.0  позволяют  прикладным
программам использовать информацию по стране,  причем  им  для
этого необязательно менять код текущей для системы страны.
     Утилиты  позволяют пользователю выбирать тип клавиатуры и
код текущей для системы страны.
     Эта  версия  системы  не  поддерживает  алфавиты  языков,
использующих технику письма справа налево.

     5.2 Функции поддержки национальных алфавитов

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

     - Функция  44Н  (код  0СН)  -  обеспечивает  переключение
       кодовых страниц для устройства.
     - Функция  65Н  -  возвращает  стандартную информацию по
       стране и указатели  на  соответствующие  сравнительные

                             - 229 -


       таблицы и таблицы регистрового преобразования.
     - Функция 66Н - получает или устанавливает кодовую стра-
       ницу, используемую всеми устройствами.

     Вся информация по стране, к которой обеспечивается доступ
этими функциями находится в файле country.sys.


     5.3 Фонтовые файлы

     Фонтовые  файлы  также называются информационными файлами
кодовой страницы. Они идентифицируются расширением .cpi.
     MS-DOS 4.0 включает четыре таких файла:

     Файл             Поддерживаемое устройство
     __________________________________________________________
     ega.cpi          Цветной графический дисплей (EGA)
     lcd.cpi          Жидко-кристалический дисплей
     4201.cpi         Семья принтеров IBM 4201 Proprinter и
                      IBM 4202 Proprinter
     4208.cpi         Принтеры IBM 4207 Proprinter X24 и
                      IBM 4208 Proprinter XL24
     5202.cpi         Принтер IBM 5202  Quietwriter III
     __________________________________________________________



t1     5.3.1 Структура фонтовых файлов
     __________________________________________________________
     і 23-БАЙТА  - Заголовок файла                            і
     і________________________________________________________і
     і WORD      - Информационный заголовок                   і
     і________________________________________________________і
     і 28-БАЙТ   - Заголовок(ки) кодовой страницы             і
     і________________________________________________________і
     і Блок(и) параметров  (переменной длины)                 і
     і________________________________________________________і
     і 150-БАЙТ  - Право копии (С)                            і
     і________________________________________________________і

t0     Первый заголовок кодовой страницы непосредственно следует
за  информационным  заголовком. Право копии всегда находится в
конце файла. Между ними чередуются заголовки кодовых страниц и
блоки параметров.
     Описание полей приводится ниже:

                  Заголовок файла

     Каждый файл  начинается  со  своего  заголовка,  имеющего
следующий формат:

     8-БАЙТ - бирка файла
     8-БАЙТ - зарезервированы
     WORD   - количество указателей
     BYTE   - тип указателя
     WORD   - смещение

     а)  Бирка  файла  начинается  с  байта  0FFH,  за которым
         следует строка из семи байт "font.".
     б)  Зарезервированные байты являются нулями.

                             - 230 -


     в)  Количество  указателей   это   число   информационных
         указателей в заголовке. Для MS-DOS 4.0  значение этого
         поля должно быть равно единице.
     г)  Тип  указателя  это  тип  информационных указателей в
         заголовке. Для MS-DOS 4.0 значение этого поля должно
         быть равно единице.
     д)  Смещение это смещение в  байтах  от  начала  файла  до
         информационного заголовка.

                  Информационный заголовок

     Это  поле  содержит  количество кодовых страниц фонтового
файла.

                  Заголовок кодовой страницы

     Количество кодовых страниц фонтового файла указано в поле
"Информационный  заголовок".  Для  каждой   кодовой   страницы
предусмотрен  заголовок,  дающий общую информацию о конкретной
кодовой странице и имеющий следующий формат:

     WORD   - длина
     DWORD  - указатель
     WORD   - тип устройства
     8-БАЙТ - подтип устройства
     WORD   - идентификатор кодовой страницы
     6-БАЙТ - зарезервированы
     DWORD  - смещение


     а) Длина это размер заголовка кодовой страницы.  Учитывая
        то, что заголовок имеет фиксированный размер, значение
        этого  поля  может  быть  использовано  для   проверки
        правильности считывания фонтового файла.
     б) Указатель  это  адрес  заголовка  следующей  кодовой
        страницы. Последний указатель в цепи равен нулю (0,0).
     в) Тип устройства  равен  1,  если  устройством  является
        растровый дисплей, и 2, если таковым является принтер.
     г) Подтип  устройства  указывает  имя  типа устройства и
        одновременно  имя  фонтового  файла.  Например,   если
        подтип "EGA", то файл имеет имя ega.cpi.
     д) Идентификатор   кодовой   страницы  это  разрешенный
        идентификационный номер кодовой страницы, состоящий из
        трех цифр. Разрешенными номерами являются - 437,  850,
        860, 863 и 865.
     е) Зарезервированные байты являются нулями.
     ж) Смещение  это  адрес  блока параметров данной кодовой
        страницы, описание которого приводится ниже.

                  Блок параметров

     Блок параметров имеет следующую структуру:

     6-БАЙТ - Заголовок блока параметров
     ?-БАЙТ - Описание(я) шрифта

     а) Заголовок  блока  параметров   указывает   количество
        описаний шрифта для текущей кодовой страницы и имеет
        следующий формат:


                             - 231 -


        WORD - Зарезервировано
        WORD - Количество  шрифтов
        WORD - Длина

        - Зарезервированное слово равно единице.
        - Количество шрифтов это количество описаний шрифтов,
          непосредственно  следующих   за   заголовком   блока
          параметров.  Все эти описания ассоциируются с данной
          кодовой страницей. Для  принтеров  это  поле  должно
          быть равно единице.
        - Длина это сумма размеров (в байтах) всех описаний.

     б) Описание шрифта различается для дисплея и принтера.

        1. Описание шрифта для дисплея имеет следующий формат:

           BYTE - Высота
           BYTE - Ширина
           BYTE - Относительная высота
           BYTE - Относительная ширина
           WORD - Количество символов
           ?    - Битовые карты

           - Высота это количество занимаемых символом рядов
             пикселей на экране.
           - Ширина это количество занимаемых символом колонок
             пикселей на экране.
           - Относительная высота пока не используется (0).
           - Относительная ширина пока не используется (0).
           - Количество   символов   это  количество
             символов, описание которых дано соответствующими
             картами бит, следующими  сразу  за  этим  полем.
             Обычно  это  поле равно 256 (количество символов
             ASCII).
           - Битовые карты это последовательность битовых карт
             для   каждого   символа   шрифта.   Каждая  карта
             представляет собой упакованный массив бит, органи-
             зованных в ряды по  колонкам,  начиная  с  левого
             верхнего угла образа символа.
             Общая длина описания  шрифта  для  дисплея  равна
             сумме   шести   байт   с  результатом  умножения
             количества   символов   на   количество    байт,
             необходимых для их кодировки.

        2. Существуют   два   формата  описания  шрифта  для
           принтера.  Они   различаются   только   количеством
           управляющих последовательностей в описании шрифта.
           В   отличии   от   описания   шрифта  для  дисплея,
           количество байт, занимаемое  описанием  шрифта  для
           принтера, не может быть определено непосредственно.
           Это количество вычисляется в зависимости от размера
           заголовка.   В  результате,  только  одно  описание
           шрифта для принтера может содержаться в данном блоке
           параметров. Другими словами, невозможно определить
           место, где кончается первое и начинается второе опи-
           сание. Формат описания приведен ниже:

           WORD - Тип формата
           WORD - Длина поля управляющих последовательностей
           ?    - Управляющие последовательности

                             - 232 -

           ?    - ESC- последовательности для загрузки шрифтов

           - Тип формата указывает один из двух типов форматов,
             используемых существующими файлами:

             Тип      Фонтовый файл для принтера
             ___________________________________
             1        4201.cpi
             2        4208.cpi
             2        5202.cpi
             ___________________________________

           - Длина   поля   управляющих  последовательностей
             указывается в байтах  и  должна  быть  меньше  31
             (байт).
           - Управляющие последовательности используются для
             инициализации принтера с этой кодовой страницей.
             Длина этого поля определена в предыдущем поле.
             Если поле выбора формата равно 2, то это поле
             включает   единственную   ESC-последовательность,
             выбирающую шрифт для этой кодовой страницы  (этот
             шрифт мог быть и загружен).
             Если поле выбора формата равно 1, то описываемое
             поле       будет       уже      включать      две
             ESC-последовательности   в   следующем  формате:

             BYTE - Длина аппаратной последовательности
             ?    - Аппаратная последовательность
             BYTE - Длина последовательности для загружаемых
                    шрифтов
             ?      Последовательность для загружаемых шрифтов

                    - Длина аппаратной последовательности это
                      количество байт, занимаемое этой после-
                      довательностью.
                    - Аппаратная последовательность это ESC-
                      последовательность, выбирающая шрифт,
                      реализованный аппаратно.
                    - Длина последовательности для загружаемых
                      шрифтов это количество байт, занимаемое
                      этой последовательностью.
                    - Последовательность  для  загружаемых
                      шрифтов   это   ESC-последовательность,
                      выбирающая  для  принтера   загружаемый
                      шрифт,  резидентный  в  данный  момент.
                      Общее количество байт в  этих  подполях
                      должно   быть  равно  количеству  байт,
                      указанному   в   поле    "Длина    поля
                      управляющих    последовательностей"   в
                      описании шрифта.
           - Последовательность для загружаемых шрифтов это
             ESC-последовательность,     необходимая    для
             загрузки  шрифта (делает его резидентным). Длина
             этой   последовательности   вычисляется    путем
             вычитания   размера   начальной  части  описания
             шрифта (для принтера) из величины,  указанной  в
             поле "Длина" заголовка блока параметров. Так как
             принтеры  4208 и 5202 имеют аппаратную поддержку
             кодовых страниц, то нет необходимости  загружать
             в  них  какие  бы  то  ни  было  шрифты. Поэтому
             описываемое поле отсутствует в файлах 4208.cpi и
             5202.cpi.

                             - 233 -


     __________________________________________________________

                             ГЛАВА 6

                СТРУКТУРА И ЗАГРУЗКА  .EXE  ФАЙЛОВ

     __________________________________________________________

     6.1 Введение
     6.2 Формат заголовка файла
     6.3 Таблица настройки адресов

     __________________________________________________________


     6.1 Введение

     __________________________________________________________
     Примечание
               Эта глава дает  описание  структуры  и  порядка
               загрузки .exe файлов для версий системы до 2.0.
               Для версий 2.0 и позже, используйте функцию 4В00Н
               для загрузки .exe файлов.
     __________________________________________________________

     .EXE файлы, создаваемые сборщиком, состоят из двух частей:

     - Управляющая и настроечная информация
     - Загрузочный модуль

     Управляющая  и настроечная информация помещается в начало
файла и называется заголовком файла. Сразу за заголовком файла
следует загрузочный модуль.

     6.2 Формат заголовка файла

     Смещение  Содержание
     __________________________________________________________
     0-1       4DH,5АH
     2-3       Количество байт, содержащееся в последней
               странице. Применяется для считывания накладыва-
               емых программ.
     4-5       Размер файла в 512-байтных страницах, включая
               заголовок.
     6-7       Количество входов в таблице настройки адресов.
     8-9       Размер заголовка в 16-байтных параграфах.
               Используется для определения начала загрузочного
               модуля в файле.
     AH-BH     Минимальное количество 16-байтных параграфов,
               необходимое помимо объема  памяти,  выделенной
               программе.
     СН-DH     Максимальное количество 16-байтных параграфов,
               необходимое помимо объема памяти,   выделенной
               программе.
     EH-FH     Начальное значение, загружаемое в сегмент стэка
               перед началом выполнения программы.
               Настраивается при загрузке.
     10-11     Начальное значение, загружаемое в регистр SP
               перед началом выполнения программы.
     12-13     Сумма всех слов в файле в дополнительном коде.

                             - 234 -


     14-15     Начальное значение, загружаемое в регистр IP
               перед началом выполнения программы.
     16-17     Начальное значение, загружаемое в регистр CS
               перед началом выполнения программ настраивается
               при загрузке.
     18-19     Относительное смещение таблицы настройки адресов
               от начала файла.
     1АН-1ВН   Номер накладываемой программы, присвоенный
               сборщиком.
     __________________________________________________________


     6.3 Таблица настройки адресов

     Таблица  настройки  адресов  следует  непосредственно  за
форматной областью, описанной выше, и состоит  из  переменного
количества  элементов  таблицы. Каждый элемент таблицы состоит
из  двух  полей:  двубайтное  смещение,  за  которым   следует
двубайтный сегментный адрес. Оба этих поля содержат смещение в
загружаемом модуле, содержимое которого будет  модифицировано
перед тем, как управление будет передано загрузочному  модулю.
Этот процесс протекает следующим образом:

     1. Форматная  часть  заголовка  считывается в память. Ее
        размер равен 1ВН.
     2. MS-DOS выделяет  часть  памяти,   в  зависимости  от
        размера  загрузочного модуля и значений полей АН-ВН и
        СН-DН.  Затем   система   пытается   выделить   0FFFH
        параграфов  памяти.  Эта  попытка никогда не удается,
        при этом возвращается размер  наибольшего  свободного
        участка  памяти.  Если  размер  этого  участка меньше
        значений, указанных в полях 4-5 и АН-ВН, то  операция
        выполняется  без  ошибок.  Однако,  если размер этого
        участка больше значений указанных  полей,  то  MS-DOS
        выделяет  участок,  размером,  равным  сумме значений
        полей 4-5 и СН-DН. При отсутствии  такового,  система
        выделяет наибольший свободный блок памяти.
     3. Префикс сегмента кодов помещается в начало  выделенной
        памяти (младшие адреса).
     4. MS-DOS вычисляет размер загрузочного модуля используя
        поля 4-5 и 8-9, т.е. вычитая размер заголовка файла из
        его размера. Окончательное  значение  настраивается  с
        помощью   значения   поля  2-3.  Операционная  система
        определяет (в зависимости от состояния переключателя
        старшие-адреса/младшие-адреса) соответствующий сегмент,
        называемый стартовым сегментом, куда система загружает
        загрузочный модуль.
     5. Загрузочный модуль считывается в  память,  начиная  со
        стартового сегмента.
     6. Элементы  таблицы  настройки  адресов  считываются  в
        рабочую область.
     7. Система прибавляет значение сегмента каждого  элемента
        таблицы   к   значению   стартового   сегмента. Этот
        вычисленный сегмент плюс смещение указывает модуль,  к
        которому прибавляется значение стартового сегмента.
        Результат помещается обратно в соответствующее место
        загрузочного модуля.
     8. Система  выставляет  значения  регистров  SS  и  SP,
        используя соответствующие значения из заголовка файла.
        После этого  система  прибавляет  значение  стартового

                             - 235 -


        сегмента  к  SS,  а  в  регистры  ES  и  DS  загружает
        сегментный адрес Префикса сегмента кодов. К полю 16-17
        прибавляется значение стартового  сегмента.  Результат
        загружается  в  регистр  CS.  В  регистр IP помещается
        значение  поля   14-15,   таким  образом,   управление
        передается загруженной программе.



© KOAP Open Portal 2000


?????? ???????????