Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
20th
Май
Выход из программы на асме?
Posted by Chas under Пост-обзор
Меня давно интересовал вопрос. Почему пишут:
mov ah,4Ch/int 21h
Ведь проще и быстрее написать int 20h Тоже ведь выход из программы? Так в чем разница?
Mikl___:
А еще я видел «умников», которые в качестве конца программы использовали команду 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 (предварительно помещенные в стек) еще и поместит в регистр флагов непонятно что хотя закрываемой программе это уже будет «до лампочки»
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)