Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 05:38   #11
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от Ibanez Wizard
Меня давно интересовал вопрос. Почему пишут:
mov ah,4Ch/int 21h
Ведь проще и быстрее написать int 20h Тоже ведь выход из программы? Так в чем разница?
Ibanez Wizard
А еще я видел "умников", которые в качестве конца программы использовали команду hlt
Извратные и не очень способы выйти из программы в DOS

1) Функция DOS 00H: завершить программу
Вход AH = 00H CS = сегмент PSP завершающегося процесса
Выход нет = (неприменим)
Описание:
передает управление на вектор завершения в PSP (выходит в родительский процесс). Идентична функции INT 20H Terminate. регистр CS должен указывать на PSP. восстанавливает векторы прерываний DOS 22H-24H (завершение, Ctrl-Break и Критическая ошибка), устанавливая значения, сохраненные в родительском PSP. выполняет сброс файловых буферов. файлы должны быть предварительно закрыты, если их длина изменилась.
Замечание: Проще и более аккуратно - использовать функцию DOS 4Ch Exit.
2) Функция DOS 4Ch: завершить программу -- EXIT
Вход AH = 4Ch AL = код выхода
Выход нет = (неприменим)
Описание:
возвращает управление от порожденного процесса его родителю, устанавливая код выхода, который можно опросить функцией 4dH WAIT. Управление передается по адресу завершения в PSP завершающейся программы. векторы Ctrl-Break и Critical Error восстанавливаются к старым адресам, сохраненнмы в родительском PSP.
Замечание:
значение ERRORLEVEL (используемое в пакетных файлах DOS) можно использовать для проверки кода выхода самой последней программы.
3) 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.
4) Для COM- программ CS=DS=ES=SS SP=0FFFEh SS:[0FFFE]=0 CS:[0000]=0CD20h поэтому первая команда RETN (если до этого ничего не посылалось в стек) приведет к вызову int 20h (код CD20) что вызовет завершение программы
5) Для EXE-программ до установки DS на сегмент данных DS=PSP а PSP:[0000]=CD20 и чтобы перейти на этот адрес нужно предварительно загнать в стек PSP и 0 и сделать RETF или, как варианты, JMP FAR или CALL FAR по адресу PSP:[0000]
6) команда iret которая сделает IP=0 и вытащит из стека PSP (предварительно помещенные в стек) еще и поместит в регистр флагов непонятно что хотя закрываемой программе это уже будет "до лампочки"
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простейшие циклы. margarit Паскаль, Turbo Pascal, PascalABC.NET 5 13.01.2011 11:55
Простейшие циклы. Wild_klas Помощь студентам 2 08.11.2010 18:13
Простейшие вычисления AcidBurst Помощь студентам 3 01.11.2010 10:48
Простейшие циклы. tema654 Помощь студентам 0 11.10.2010 22:51
Простейшие задачки zoza1 Общие вопросы Delphi 1 11.09.2009 21:10