2.2. Завершение программ

Error message

Notice: Undefined index: add term path in hansel_get_breadcrumbs() (line 524 of /data/sites/msdosworld.ru/www/sites/all/modules/hansel/hansel.module).

      Программа,   выполняющаяся  под   управлением  ДОС,   может

 завершиться   двумя   способами.   Первый   способ   состоит   в

 освобождении памяти,  занятой программой, и  передаче управления

 родительскому процессу или операционной системе.

 

      В ДОС  1.x при запуске  программы Вы должны  были сохранить

 адрес PSP. Затем, для  завершения программы требовалось передать

 управление  по адресу  PSP:00h,  где  хранится команда  Int 20h,

 например, так:

 

      mov   ax,PSP

      push  ax

      xor   ax,ax   ; ax=0

      push  ax

      retf          ; т. е. переход на PSP:0

 

      В  ДОС  2.x  завершить  работу  программы  проще. Это можно

 сделать с помощью:

 

      - фн 00h или Int 20h, если CS указывает на PSP;

      - фн 4Ch при любых значениях регистров.

 

      Второй  способ  завершения   состоит  также  в  возвращении

 управления ДОС, но память, занятая программой, не освобождается,

 т. е.  программа становится  резидентной. Резидентные  программы

 обычно используются  как перехватчики различных прерываний  BIOS

 и/или ДОС. Сделать программу резидентной можно с помощью:

 

      - Int 27h, если размер резидентной части меньше 64 Кб;

      - фн 31h при любом размере программы.

 

      При завершении программы любым из двух способов выполняются

 следуюие действия:

 

      -  буфера всех  незакрытых  файлов  сбрасываются на  диск и

 файлы закрываются;

      - восстанавливается содержимое векторов  Int 22h, Int 23h и

 Int 24h, которое было до запуска программы;

      -  если  для  завершения  использованы  фн  4Ch или 31h, то

 заданный в них код завершения передается ДОС;

      -  управление  передается  родительскому  процессу  (обычно

 операционной системе).

 

      Код   завершения  программы   может  быть   проанализирован

 программой-родителем с  помощью фн 4Dh  или командой COMMAND.COM

 "IF ERRORLEVEL".

 

      См. также: Функции управления процесами.

 

 
Вы находитесь в разделе: 

Добавить коментарий