Win32asm обучение


Урок 12 - Первая программа - часть 3


.code

start:

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK + MB_ICONINFORMATION

end start

Добавьте вышеприведенный код к вашему файлу first.asm

Мы также добавили метку начала. Если бы вы ассемблировали сейчас нашу программу и запустили ее, она бы отобразила messagebox и вероятно повисла (или выдала ошибку) после того, как вы нажали OK. Это произойдет потому, что программа еще не закончена, и процессор начнет выполнять код, который находится после кода messagebox (а там, в данном случае, может быть всякий мусор). Программы в windows завершаются функцией ExitProcess:

Функция ExitProcess завершает процесс и все его нити.

VOID ExitProcess(

UINT uExitCode // код выхода для всех нитей
);

Мы можем использовать 0, как код выхода:

Замените ваш код на этот:

.code

start:

invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK + MB_ICONINFORMATION
invoke ExitProcess, NULL

end start

12.4 - Шаг 4

Вот, та программа, которая у нас получилась:

.486
.model flat, stdcall

option casemap:none

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\windows.inc

.data
MsgText db "Hello world!",0
MsgTitle db "This is a messagebox",0

.code

start:
invoke MessageBox, NULL, ADDR MsgText, ADDR MsgTitle, MB_OK or MB_ICONINFORMATION
invoke ExitProcess, NULL

end start

12.5 - Шаг 5

Теперь создадим исполняемую программу из этого исходного текста.

Создайте новый текстовый файл и назовите его make.bat со следующим содержанием:

@echo off
ml /c /coff first.asm
link /subsystem:windows first.obj
pause>nul

Анализ:

ml /c /coff first.asm

ml это макроассемблер (masm). Masm создаст необработанный код программы. Опции означают:
/c = Ассемблирование без линковки (компоновки). (потому, что мы используем link.exe для этого)
/coff = генерировать объектный файл COFF-формата. Это стандарт для программ windows.
first.asm = ассемблируемый файл first.asm

link /subsystem:windows first.objЛинкер (компоновщик) берет объектный файл и связывает его со всеми импортированными dll и библиотеками. Опции:
/subsystem:windows = создать исполняемый файл для windows.
first.obj = Линковать first.obj

Теперь, если вы сделали все правильно и запустите файл make.bat, то здесь появится файл first.exe. Запустите его и увидите результат.

[наверх]




- Начало -  - Назад -  - Вперед -