|
Эта
программа начинается с адреса (EndOfCode), получаемого округлени-
ем его до следующей границы сегмента и преобразованием в парагра-
фы путем деления на 16.
- 4-39 -
Листинг 4-26. Выполнение запроса
"завершить и оставить резидентной"
----------------------------------------------------------------
mov dx,OFFSET EndOfCode ; dx <== конец резидентной пр-мы
add dx,0fh ; округление до след. |
перевод с английского на русский |
|
|
гран. сегм.
mov cl,4 ; преобразование смещения в сегм.
shr dx,cl ; dx <== резидентные параграфы
mov ah,31h ; функция TSR DOS
int 21h
----------------------------------------------------------------
В результате завершения запроса управление передается в DOS,
а DOS возвращает управление в командный процессор (обычно файл
COMMAND.COM). |
системы резервного копирования |
|
{img3} |
отказоустойчивые вычислительные системы |
|
До тех пор, пока пользователь не вызовет другую
программу, прикладной программой переднего плана будет командный
процессор.
Повторная активизация TSR
Когда TSR получает запрос повторной активации, она должна
убедиться в безопасности дальнейшего выполнения. Эту задачу уп-
рощают действия, выполняемые программой инициализации. |
GPS-навигатор |
|
|
перевод с русского на английский, архиватор rar, symantec antivirus, системы управления базой данных, английский словарь, .
антивирус касперского
|
Для освобождения среды ис-
пользуйте функцию 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
----------------------------------------------------------------
Завершение программы
Последней задачей процесса инициализации является вызов функ-
ции "завершить и оставить резидентной" (int 21h, функция 31h).
При вызове функции "завершить и оставить резидентной" необходимо
сообщить DOS о том, какой объем памяти нужно сохранить. Для этого
перед выдачей запроса int 21h AH=31h, следует поместить в регистр
DX необходимое количество сегментов. DOS освободит все кроме пер-
вых DX сегментов памяти, которыми владела Ваша программа. Обще-
принято размещать программу инициализации в конце TSR так, чтобы
она могла быть удалена после завершения своей работы. Следующий
листинг иллюстрирует использование этой служебной функции.
|
|
|