Асемблер различия функции 4C и вызова прерывания 21h от прерывания 20h
Какие всё же различия функции 4C и вызова прерывания 21h от прерывания 20h, ведь и то, и другое вызывает завершение программы.
Какие всё же различия функции 4C и вызова прерывания 21h от прерывания 20h, ведь и то, и другое вызывает завершение программы.
Можно же открыть документацию и посмотреть. Уделите внимание требованию равенства CS=PSP и выполнению этого правила в .EXE и .COM программах и различии в проверке этого равенства в этих прерываниях. При INT 20h соблюдение данного правила в файлах .EXE лежит на программисте.
INT 20H - Завершить программу
Это прерывание используется для выхода из программы и возврата управления родительскому процессу (обычно интерпретатору команд DOS - COMMAND.COM). Оно восстанавливает значения управляющих векторов INT 22H INT 23H INT 24H. Оно также сбрасывает все файловые буфера (если длина файла изменилась, то файл должен быть предварительно закрыт).
Важно: Регистр CS должен содержать значение PSP завершающегося процесса. Если ваш CS не равен PSP, вы можете выдать JMP или RET на PSP:0000.
Рекомендуется использовать функцию 4cH Terminate, чтобы избежать трудностей, связанных с неравенством CS и PSP. Она позволяет также задать код выхода. Программы COM-формата обычно выполняются при CS=PSP, так что им можно выдавать INT 20H в любой момент. EXE-программы могут выдавать FAR JMP или FAR RET, чтобы передать управление на PSP:0000, где содержится инструкция INT 20H.
INT 21H - Сервис DOS Fn 4cH - Завершить программу -- EXIT
Вход
Выход
Описание:
возвращает управление от порожденного процесса его родителю, устанавливая код выхода, который можно опросить функцией 4dH WAIT. Управление передается по адресу завершения в PSP завершающейся программы. векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненнмы в родительском PSP.
Замечание:
значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.