На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / Освобождение операционной среды Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Освобождение операционной среды

Среда содержит строки символов. Каждая строка имеет имя переменной, за которой следует значение (более полное описание среды приведено в главе 3). DOS устанавливает среду при загрузке Вашей резидентной подпрограммы TSR. Программы свободны в интерпретации значений этих переменных. Файл COMMAND.COM использует переменную PATH (путь) для указания каталогов, в которых необходимо производить поиск загружаемой программы или командного файла.


Так как при загрузке программы файл COMMAND.COM запрашивает DOS о передаче копии операционной среды, TSR нет необходимости проводить после ее завершения любые изменения в среде. Время, в течение которого среда является правильной, - это время инициализации TSR. Использует ли Ваша TSR среду или по разным причинам не использует, зависит от приложения. В связи с тем, что после завершения TSR среда является неправильной и она занимает определенную память, то нет никаких причин хранить ее (хотя отказ от освобождения среды не оказывает неблагоприятного воздействия на TSR).


Начальный сегмент среды содержится в PSP по смещению 2Ch (смотри листинг 4-15 "Структура PSP"). Для освобождения среды используйте функцию int 21h AH=49h "Освободить блок памяти". При некоторых обстоятельствах среда отсутствует. Поэтому, прежде чем освобождать среду, необходимо проверить эти обстоятельства. Если среда отсутствует, то PSP будет содержать нули по смещению 2Ch (функция 49h будет иметь некоторые проблемы при освобождении блока памяти в ячейке 00000h). Пример освобождения среды приведен в листинге 4-25.



                         Листинг 4-25. Освобождение среды
         ----------------------------------------------------------------

         ;
         ;                     Освобождение среды
         ;
         ;  Замечание: Структура PSP_W_Envron является частью структуры
         ;             PSP с именем STRUC в листинге 4-15
         FreeEnv  PROC   NEAR
                  pushr   ; сохранение некоторых регистров
                  mov    ah,62h     ; запрос адреса PSP
                  int    21h
                  mov    es,bx      ; es <== PSP
                  xor    ax,ax      ; ax <== 0
                  xchg   ax,es:PSP_W_Envron
                                    ; затирание сегмента среды в PSP
                                    ; ax <== сегмент среды
                  or     ax,ax      ; среда присутствует ?
                  jz     NoEnv      ; если 0 -- нет
                  mov    es,ax      ; es <== среда
                  mov    ah,49h     ; освободить блок памяти
                  int    21h
         NoEnv:   popr    ; восстановление регистров
                  ret               ; возврат
         FreeEnv  ENDP
         ----------------------------------------------------------------

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz