Урок 1:Создаём программу выводящую сообщение.
Часть1.
Вы ещё не скачали пример?Так
жмите сюда.
И
так,вы готовы?Начинаем ликбез!Перед вами содержимое файла HW.ASM:
HW.ASM |
format PE GUI 4.0
entry начало
include 'tm.inc'
include 'c:\fasm\include\win32a.inc'
section
'.code' code readable
executable
начало:
invoke MessageBox,NULL,\
"Привет!Я твоя первая программа на
FASM.",\
'Моя Первая Прога!Ура!Ура!!',\
MB_OK+MB_ICONWARNING
invoke ExitProcess,NULL
section '.idata' import data readable
writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'c:\fasm\include\apia\kernel32.inc'
include
'c:\fasm\include\apia\user32.inc'
|
Что же такое format
PE GUI 4.0?Зловредные програмисты Мелкософта
придумали формат PE для исполняемых
файлов(*.exe) и динамических библиотек(*.dll) Window's.Gui 4.0 означает что мы
хотим получить графическое приложение,а не консоль типа Far'a.
Смотрим дальше:
entry начало -назначаем
началом программы метку
начало
.
include 'tm.inc'
include 'c:\fasm\include\win32a.inc'
-подключаем необходимые inc-файлы(аналог *.H в
C/C++).
section '.code' code readable executable -Объявляем секцию '.code' - секцией исполнимого кода (доступ только
чтение).
начало: -начало исполняемого кода
программы.
invoke MessageBox,NULL, "Привет!Я твоя первая программа
на FASM.", 'Моя Первая
Прога!Ура!Ура!!',MB_OK+MB_ICONWARNING -Здесь мы вызываем функцию
MessageBox из библиотеки User32.dll .Вот её прототип(синтаксис):
MessageBox hwnd:DWORD, lpText:DWORD,
lpCaption:DWORD,uType:DWORD
MessageBox -имя функции.
hwnd -Указатель(хендл)
родительского окна.У нас нет родительского окна,поэтому ставим
ноль(NULL).
lpText -указатель на текст сообщения.
lpCaption -указатель
на текст заголовка MessageBox'a.
uType -тип сообщения.Может принимать
значения:
MB_OK = 000000h -Кнопки 'OK'.
MB_OKCANCEL = 000001h -Кнопки 'OK,'Отменить'.
MB_ABORTRETRYIGNORE = 000002h -Кнопки
'Прервать',Повторить','Пропустить'.
MB_YESNOCANCEL = 000003h -Кнопки
'Да','Нет','Отменить'.
MB_YESNO = 000004h -Кнопки 'Да','Нет'.
MB_RETRYCANCEL = 000005h -Кнопки
'Повторить','Отменить'.
MB_ICONHAND = 000010h -Значок 'Ошибка'.
MB_ICONQUESTION = 000020h Значок вопроса.
MB_ICONEXCLAMATION = 000030h Значок с восклицательным
знаком.
MB_ICONASTERISK = 000040h -Значок с буквой i.
MB_USERICON = 000080h -unknow
MB_ICONWARNING = MB_ICONEXCLAMATION
MB_ICONERROR = MB_ICONHAND
MB_ICONINFORMATION = MB_ICONASTERISK
MB_ICONSTOP = MB_ICONHAND
MB_DEFBUTTON1 = 000000h -unknow
MB_DEFBUTTON2 = 000100h -unknow
MB_DEFBUTTON3 = 000200h -unknow
MB_DEFBUTTON4 = 000300h -unknow
MB_APPLMODAL = 000000h -модальный по отнощению к
программе.
MB_SYSTEMMODAL = 001000h -Модальный по отношению к
системе.
MB_TASKMODAL = 002000h -unknow
MB_HELP = 004000h -добавляет кнопку
Справка(help).
MB_NOFOCUS = 008000h -unknow
MB_SETFOREGROUND = 010000h
-unknow
MB_DEFAULT_DESKTOP_ONLY = 020000h похоже на 200000h
MB_TOPMOST = 040000h -поверх окон.
MB_RIGHT = 080000h -сдвигает текст вправо.
MB_RTLREADING = 100000h -кнопка закрытия слева.
MB_SERVICE_NOTIFICATION = 200000h -MessageBox выглядит как системное
сообщение(даже заголовок окна не поддерживает XP стиль.
Результаты которые функция может
возвратить(возвращаемое значение всегда находится в регистре
eax:
IDOK = 1
IDCANCEL = 2
IDABORT = 3
IDRETRY = 4
IDIGNORE = 5
IDYES = 6
IDNO = 7
IDCLOSE = 8
IDHELP =
9
Проверять возвращаемое значение мы научимся
немного позже.А пока расмотрим дальше текст программы.
invoke
ExitProcess,NULL -Функция сообщающая системе о завершении работы
программы.Синтаксис функции :
ExitProcess uExitCode:DWORD - где
uExitCode-этозначение, котоpое пpогpамма веpнет Windows после окончания работы
пpогpаммы.
section '.idata' import data readable writeable -Объявляем секцию
'.idata' - секцией имортируемых данных (доступ
чтение,запись).
library
kernel32,'KERNEL32.DLL',user32,'USER32.DLL' -указываем библиотеки которые использует
программа.Синтаксис:
library имя_библиотеки1,Строка с полным именем
библиотеки1,имя_библиотеки2,Строка с полным именем библиотеки2 и
т.д.
include 'c:\fasm\include\apia\kernel32.inc'
include 'c:\fasm\include\apia\user32.inc'
-Эти строки говорят о том что мы подключили в
это место программы inc-файлы для библиотек kernell32 и user32.
Скомпилировать(получить из текста) программу можно
тремя способами:
1.Вы установили RadAsm,GoRC.EXE и Fasm.exe.Просто
откройте hw.rap .
2.Вы установили GoRC.EXE и
Fasmw.exe.Просто запустите less1fasmw.bat и когда вас попросят жмите на любую
клавишу пока не откроется окно Fasmw.exe с текстом программы(Кстати вам
прийдётся зайти в options >Appearance и нажать кнопку Change напротив пункта
Font .Теперь измените 'Набор Символов' на Кирилический(а то русские слова будут
смотрется не корректно.).Жмите клавишу F9 и получайте
программу.
3.Вы установили RadAsm,GoRC.EXE и Fasm.exe.Просто
запустите less1fasm.bat
Вы можете изменять текст программы при помощи
программ:Блокнот,RadAsm,Fasmw.Для того чтобы усвоить урок поменяйте текст
надписей и атрибут MB_.Вы
можете использовать и комбинацию аттрибутов MB_.Например: MB_YESNO+MB_ICONEXCLAMATION+MB_SYSTEMMODAL
Также попытайтесь создать программу которая выдаст вам
несколько сообщений одно за другим.
А во второй части мы немного улучшим нашу программу.