Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 18, М.: Диалог-МИФИ, 1995, 254 стр.

[Назад] [Содеожание] [Дальше]

3.5. Завершение работы программы

Старые версии MS-DOS (до 2.0) требовали выполнения достаточно сложной процедуры для завершения программы. В начале работы программы было нужно сохранить адрес PSP , затем перед завершением работы поместить этот адрес в стек, записать туда же слово 0000h и выполнить команду дальнего возврата. Управление при этом передается в начало PSP, где находится команда INT 20h .

Для версий MS-DOS, начиная с 2.0, существуют более удобные способы.

С помощью прерывания INT 20h или функции 0 прерывания INT 21h обычно завершают свою работу com-программы. Учтите, что перед завершением работы программы регистр CS должен указывать на PSP .

Более удобна функция 4Ch прерывания INT 21h которую можно использовать с любым содержимым регистров.

Последний способ рекомендуется для повсеместного использования. Он позволяет передать родительской программе (например, программе command.com ) код завершения. Этот код доступен для анализа в пакетных файлах командой if errorlevel.

Примеры программ на языке ассемблера, приведенные в нашей книге, содержат директиву .EXIT . Эта директива завершает выполнение программы с помощью функции 4Ch и позволяет передать код завершения.

Если ваша программа запустила дочернюю программу и та завершилась, передав код возврата, то родительская программа может определить этот код с помощью функции 4Dh прерывания INT 21h . Эта функция возвращает код в регистре AX.

Программа, написанная на языке С, может завершаться с помощью оператора return в функции main или с помощью функции exit в любом месте программы. При этом также возможна передача кода возврата.

Существуют еще способы завершения работы программы, при которых программа (или ее часть) остается резидентной в памяти. Это вызов прерывания INT 27h или функции 31h прерывания INT 21h . О таком способе будет подробно рассказано в главе, посвященной резидентным программам.

[Назад] [Содеожание] [Дальше]