Сборник по задачам и примерам Assembler




Минимальная программа консольного приложения



Минимальная программа консольного приложения

Минимальная программа консольного приложения на ассемблере выглядит так:

.model flat.STDCALL ;модель памяти flat.

i ncludeWindowConA.i nc

:Обьявление внешними используемых в данной программе функций Win32 (ASCII):

extrn AllocConsole:PROC

extrn SetConsoleTitleA:PROC

extrn ExitProcess:PROC

.data

TitleText db 'Минимальное консольное приложение Win32'.0

.code

start proc near :точка входа в программу:

:запрос консоли

call AllocConsole проверить успех запроса консоли

test eax.eax

jz exit :неудача :выведем заголовок окна консоли SetConsoleTitle:

push offset TitleText

call SetConsoleTitleA проверить успех вывода заголовка

test eax.eax

jz exit ;неудача

exit: :выход из приложения

:готовим вызов VOID ExitProcess(UINT uExitCode)

push 0

call ExitProcess start endp end start

Если убрать комментарии, то кода будет совсем немного. В нем представлены вызовы трех функций: AllocConsole, SetConsoleTitle, ExitProcess.

Первой функцией консольного приложения должна быть функция запроса консоли AllocConsole.

B00L AllocConsole(VOID);

Для вызова функции Al I ocConsol e не требуется никаких параметров. В случае успеха функция Al I ocConsol e возвращает ненулевое значение, при неудаче — нуль. Выделенная консоль представляет собой типичное для Windows окно. Процесс в конкретный момент времени может использовать одну консоль. Если ему нужно запустить еще одну консоль, то прежняя должна быть закрыта или освобождена с помощью функции FreeConsole.

B00L FreeConsole(VOID);

В случае успеха функция FreeConsol e возвращает ненулевое значение, при неудаче — нуль.

При завершении процесса выделенная процессу консоль освобождается автоматически. В нашем случае использован именно этот вариант закрытия консоли — функцией ExitProcess.

VOID ExitProcesstUINT uExitCode):

Функции ExitProcess передается код завершения процесса и всех завершаемых цепочек в этом процессе. Проанализировать этот код можно с помощью функ-

ций GetExitCodeProcess и GetExitCodeThread. В общем случае в различных ветвях кода может быть несколько точек выхода с вызовом ExitProcess. Задавая различные значения кода завершения, можно таким образом идентифицировать причину завершения процесса.




Содержание  Назад  Вперед