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 . О таком способе будет подробно рассказано в главе, посвященной резидентным программам. |