Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Функция 31H. Функция 4BH. Функция 4BH, подфункция 00H. PATH=C:\DOS




Функция 31H

Назначение: завершение программы и сохранение ее резидентной в памяти. Функция 31H завершает выполнение программы и оставляет часть ее кода резидентным в памяти. Размер кода, который остается в памяти резидентным, указывается в регистре DX в параграфах. Фактически, функция 31H изменяет размер блока памяти, выделенного для программы, и завершает ее с передачей управления той программе, из которой эта программа была вызвана, передавая ей код возврата. Код возврата указывается в регистре AL и может использоваться для возвращения программой информации о ее выполнении (например, успешное или неуспешное выполнение программы). Помимо описанных действий, функция 31H выполняет еще и некоторые другие действия:

1. Закрывает все открытые файлы и освобождает файловые буфера;

2. Устанавливает значение вектора 22H (адрес завершения программы) равным значению по смещению 000AH относительно префикса программного сегмента;

3. Устанавливает значение вектора 23H (адрес подпрограммы обработки нажатия Ctrl+Break) равным значению по смещению 000EH относительно префикса программного сегмента;

4. Устанавливает значение вектора 24H (обработчик критических ошибок) равным значению по смещению 0012H относительно префикса программного сегмента;

Функция 31H не освобождает другие блоки памяти, выделенные программой в ходе ее выполнения.

 

Функция 4BH

Назначение: загрузка и запуск программ, загрузка программ без их запуска, загрузка оверлеев. Функция 4BH имеет 3 подфункции. Для выполнения функции 4BH в регистр AH заносится значение 4BH, а в регистр AL заносится номер подфункции. При вызове подфункций функции 4BH следует учесть, что для загрузки программы должно быть достаточно свободной памяти. Перед вызовом подфункций рекомендуется изменить размер блока памяти, выделенного для программы.

 

Функция 4BH, подфункция 00H

Назначение: загрузка и запуск программы. Регистровая пара DS: DX содержит адрес (сегмент: смещение) строки в формате ASCIIZ, содержащей имя файла программы, которую нужно запустить. Регистровая пара ES: BX содержит адрес (сегмент: смещение) блока параметров, необходимых для запуска программы. После выполнения функции 4BH, подфункции 00H флаг CF устанавливается, если в ходе выполнения подфункции возникла ошибка. Если флаг CF сброшен, то подфункция выполнилась успешно. В случае успешного выполнения подфункции значения всех регистров (включая ES, DS, SS и SP) изменяются, поэтому перед выполнением подфункции 00H необходимо сохранить значения хотя бы регистров SS и SP в переменных программы для того, чтобы после вызова функции 00H можно было работать со стеком программы.

Подфункция 00H выполняет следующие действия:

1. Подготавливает префикс программного сегмента для запускаемой программы;

2. Загружает в память код программы;

3. Для программ типа EXE производит настройку элементов программы по таблице настройки;

4. Инициализирует регистры DS, ES, SS и SP;

5. Запускает программу;

6. По завершении запускаемой программы передает управление в вызывавшую программу.

Блок параметров – это структура размером 14 байт, каждое поле которой в той или иной форме указывает адрес некоторого параметра, необходимого для запуска программы. В табл. 18 приведены смещения полей блока параметров, размеры полей (в байтах) и назначение.

 

Таблица 18

Структура блока параметров

Смещение Размер Назначение
00H Сегментный адрес окружения запускаемой программы
02H Адрес строки параметров
06H Адрес неоткрытого FCB
0AH Адрес неоткрытого FCB

 

Окружение программы – это набор строк, представляющих собой значения переменных окружения. Пример окружения программы:

PATH=C: \DOS

TEMP=C: \WINDOWS\TEMP

PROMPT=$P$G

В качестве окружения для запускаемой программы можно взять копию окружения запускающей программы. В этом случае сегментный адрес окружения для блока параметров должен быть равен 0. Если необходимо создать для запускаемой программы другое окружение, то сначала нужно подготовить набор строк со значениями переменных окружения. Каждая строка заканчивается нулем. После последней строки ставится еще один нуль. После этого в блоке параметров указывается сегмент созданного окружения. Строки должны располагаться по нулевому смещению относительно этого сегмента.

Адрес строки параметров – это сегмент: смещение строки параметров для запускаемой программы. Строка параметров имеет тот же формат, что и строка параметров, располагающаяся в префиксе программного сегмента, начиная со смещения 80H. Первый байт строки – это ее длина. Остальные байты – символы строки. Максимальная длина строки – 126 символов.

FCB – это блок управления файлом, который использовался в старых версиях DOS. Новые версии DOS также поддерживают FCB, но использовать FCB в новых версиях DOS нет необходимости. Поэтому последние два поля блока параметров можно не заполнять.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...