Цель работы: Изучить программирование на Ассемблере для Windows
Текст программ:
hellowin.asm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
includelib import32.lib ;Подключение библиотеки описния системных функций .386 ;включение 32-битного режима .model flat ;модель памяти FLAT extrn MessageBoxA:proc ;Внешние процедуры extrn ExitProcess:proc .data mb_text db 'Hello, World!',0 ;Текстовые константы mb_title db 'My first program',0 ;для выполнения ;программы .code start: push 0 ;Формирование push offset mb_title ;параметров push offset mb_text ;в стеке для ;MessageBox - push 0 ;прямая передача call MessageBoxA ;Вызов MessageBox push 0 ;параметр для ExitProcess call ExitProcess ;завершение программы ends end start |
msgbox.inc:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
MB_OK = 0000H MB_OKCANCEL = 0001H MB_ABORTRETRYIGNORE = 0002H MB_YESNOCANCEL = 0003H MB_YESNO = 0004H MB_RETRYCANCEL = 0005H MB_ICONHAND = 0010H MB_ICONQUESTION = 0020H MB_ICONEXCLAMATION = 0030H MB_ICONASTERISK = 0040H ;Внешние процедуры includelib import32.lib extrn MessageBoxA:proc extrn ExitProcess:proc |
hellown2.asm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
include msgbox.inc .386 ;включение 32-битного режима .model FLAT,STDCALL ;модель памяти FLAT, ;прямая передача параметров .data mb_text db 'Hello, World!',0 ;Текстовные константы mb_title db 'Next program',0 ;для выполнения программы .code start: call MessageBoxA,0,offset mb_text, offset mb_title, MB_ICONASTERISK+MB_OK call ExitProcess,0 ;завершение программы ends end start |
Описание используемых API функций:
Вывод сообщения:
1 2 3 4 5 6 |
int MessageBox( HWND hWnd, //идентификатор окна-предка, из которого вызывается MessageBox LPCSTR lpText, //указатель на null-terminated строку, содержущая текст сообщения LPCSTR lpCaption, //указатель на null-terminated строку, содержущая заголовок сообщения UINT uType //вид диалогового окна ); |
Завершение программы:
1 2 3 |
VOID ExitProcess( UINT uExitCode, //код выхода ); |
1 2 |
>tasm/ml hellowin.asm -> hellowin.obj (334b) >tlink/Tpe/aa/c/x hellowin.obj-> hellowin.exe (4096 b) |
Немного подробнее о специфичных опциях компиляции:
Опция /ml указывает, что в тексте программы во всех именах следует различать регистр букв, то есть MessageBoxA и MESSAGEBOXA неэквивалентны.
Опцией /Tpe дается указание сгенерировать EXE файл. Если мы укажем опцию /Tpd, то на выходе компоновщика получим DLL файл.
Опция /aa указывает компилятору, что нужно создать обычное приложение Windows, использующее GDI. Если указать /ap, то компоновщик сгенерирует консольное приложение Windows (примером консольного приложения может послужить FAR).
Опция /с аналогична опции /ml, она говорит компоновщику о том, что в файле должны различаться регистры букв у имен переменных и функций.
Выводы по работе:
Мы изучили построение простейшей программы для Windows на ассемблере