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



ГЛАВА 8   РЕКОМЕНДАЦИИ ПРОГРАММИСТУ
     8.1   Введение
     8.2   Прерывания
     8.3   Системные вызовы
     8.4   Управление устройствами
     8.5   Управление памятью
     8.6   Управление программной средой
     8.7   Управление файловой и каталоговой системами
     8.7.1   Блокировка файлов
     8.9   Разное
     __________________________________________________________


     8.1 Введение

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

     8.2 Прерывания

     - Никогда не пользуйтесь прерыванием 22Н. Это прерогатива
       DOS.
       Для  изменения  вектора   процедуры   обработки   этого
       прерывания  используйте  функцию  35Н  (Получить вектор
       прерывания. Сохраните полученный вектор, а затем функцией
       25Н (Установить вектор прерывания) вставьте в гнездо для
       вектора прерывания 22Н вектор своей процедуры.
     - Осторожно  пользуйтесь  прерыванием   24Н.   Процедура
       обработки прерывания 24Н должна сохранять регистр ES.
       Кроме  того,  она  может  выполнять  системные вызовы
       только с номерами 01Н-0СН. Вызов любых  других  функций
       разрушает  стэк  MS-DOS  и  не позволяет использовать в
       дальнейшем опции 'Повторить' или 'Игнорировать'.
       При использовании указанных опций вы должны сохранять
       регистры SS, DS, SP, BX, CX и DX.
     - Процедура прерывания 24Н всегда возвращается в MS-DOS
       по команде IRET с одним из стандартных запросов.
       Процедуры, не выполняющие дальний возврат в  систему  по
       команде   IRET,  оставляют  систему  в  непредсказуемом
       состоянии до тех пор, пока не выполнен  вызов  функции,
       отличный от 01Н-0СН. Опция 'Игнорировать' может оставить
       во внутренних буферах системы некорректные данные.
     - Никогда не пользуйтесь прерыванием 23Н. Это прерогатива
       DOS.
     - Сохраняйте  все  нужные вашей программе регистры перед
       вызовом прерываний 25Н и 26Н (Абсолютные чтение/запись
       с/на диск), т.к. последние разрушают все регистры, кроме
       сегментных.
       Избегайте прямое чтение или запись векторов прерываний
       напрямую из/в память(и).
     - Используйте прерывания 25Н и 35Н для чтения и записи
       векторов прерываний из/в память(и).

                                   - 265 -




     8.3 Системные вызовы

     - Используйте новые системные вызовы.
       Избегайте использование старых  (замененных)  системных
       вызовов,  если  нет  необходимости  в  совместимости со
       старыми версиями MS-DOS (до 2.0). (См. Раздел 1.9).
     - Избегаете использование  функций  01Н-0СН  и  26Н.  Для
       чтения/записи  с/на  стандартные  ввод/вывод  в систему
       введены  новые  средства.  Вместо  функции  26Н   лучше
       использовать 4ВН.
     - Используйте систему разделения файлов, если выполняются
       одновременно несколько программ (см. Раздел 1.5.2).
     - Некоторые формы УВВ могут быть использованы только в
       сети Microsoft Networks (см. Раздел 1.6).
     - Будте  внимательны при анализе содержимого регистра AL
       после   вызова   функции   0ЕН,   т.к.   AL   указывает
       максимальное  количество  логических  дисководов,  а не
       количество активных.


     8.4 Управление устройствами

     - Используйте загружаемые драйверы устройств.
       MS-DOS  обеспечивает  модульную   структуру   драйверов
       устройств  для  БСВВ,  что  позволяет вам устанавливать
       драйверы во время загрузки системы. Подробное описание
       драйверов символьных и блоковых устройств приводится в
       Главе 2.
     - Пользуйтесь буферизованным вводом/выводом.
       Драйверы могут передавать поток данных  до  64К.  Одним
       запросом вы можете вывести на экран значительный объем
       данных.
     - С помощью функции 33Н вы можете проверить, установлен
       ли флаг проверки на CONTROL+C. Такая информация  нужна
       программам, выполняющим прямое чтение с консоли, когда
       коды   CONTROL+C  должны  восприниматься  как  простые
       данные.


     8.5 Управление памятью

     - Система ведет учет выделяемой памяти, помещая в начало
       каждого  участка  памяти  блок   управления   памятью.
       Используйте  функции  48Н,  49Н  и  4АН. Это обеспечит
       будущую совместимость ваших программ (см. Раздел 1.3).
     - Используйте  память,  выделенную  только   с   помощью
       соответствующих функций. Пользуйтесь только косвенными
       ссылками на абсолютные адреса.
       Использование невыделенной  памяти  может  привести  к
       разрушению системы управления памятью.


     8.6 Управление программной средой

     - Пользуйтесь функцией  4ВН  для  загрузки  и  выполнения
       программ.
     - Используйте функцию 31Н вместо прерывания 27Н.
       Функция 31Н позволяет оставить резидентом программы, чьи

                                   - 266 -

       размеры превышают 64К.
     - Завершайте программы функцией 4СН.
       Программы,   завершающиеся   одним   из  перечисленных
       способов, должны предварительно загрузить в  CS  адрес
       PSP:

       * Дальним переходом на смещение 0 в PSP.
       * Прерыванием 20Н (CS:0 указывает на PSP).
       * Прерыванием 21Н при АН=0 (CS:0 указывает на PSP).
       * Дальним вызовом ( call far ) по смещению 50Н в PSP при
         АН=0.


     8.7 Управление файловой и каталоговой системами

     - Использование системных вызовов обеспечит совместимость
       ваших программ с будущими версиями MS-DOS.
     - Используйте  логические  номера файлов (хендлы) вместо
       блоков управления файлами (FCB).
       Максимальное количество  одновременно  открытых  файлов
       равно по умолчанию 20. Эта граница может быть увеличена
       до 64К функцией 67Н (см. Главу 1).
     - Закрывайте измененные файлы перед вызовом прерывания
       20Н и функций 00Н, 4СН или 0DH. В противном случае их
       длина будет неправильно записана в каталог.
     - Закрывайте файлы, если они больше не нужны. Это особенно
       важно в условиях работы в сети.
     - Смена диска должна производится только  после  закрытия
       всех его файлов .

     8.7.1 Блокировка файлов

     - Программы  не  должны полагаться на запрещение доступа
       к  блокированным  участкам.  Для  выяснения  состояния
       участка необходимо сначала попытаться блокировать его,
       а затем проверить код ошибки.
     - Перед  закрытием  файла  или  выходом  из  программы
       необходимо разблокировать все заблокированные участки.
       Программы,  которые  могут  быть прерваны прерываниями
       23Н и 24Н, должны  успевать  перед  выходом  выполнить
       разблокировку.

     8.8 Разное

     - Избегайте зависимости от временных характеристик, т.к.
       тактовая частота процессоров может различаться.
     - Не  пользуйтесь    возможностями   ПЗУ,  предлагаемыми
       оригинальными производителями. Пользуйтесь стандартным
       интерфейсом операционной системы.
       Не обращайтесь напрямую к видеопамяти.
     - Предпочтительнее пользоваться .EXE-форматом, т.к. .exe
       программы более приспособлены к будущим  модификациям
       системы.
     - Используйте среду для  передачи  информации  прикладным
       программам.   Типичной   родительской   программой  для
       дочерних программ,которым передается родительская среда,
       является command.com. Таким образом, прикладной програм-
       ме передается информация о текущем дисководе и маршруте.

                            THE  END





© KOAP Open Portal 2000


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