На главную  Программирование на Ассемблере в Fasm  Операционные Системы  Написать Автору  Полезные ссылки



Для поиска введите икомое слово в текстовое поле и нажмите Enter:


Урок 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
Также попытайтесь создать программу которая выдаст вам несколько сообщений одно за другим.
А во второй части мы немного улучшим нашу программу.
Страница1 из 2-хНаверхСтраница2 из 2-х
Сайт управляется системой uCoz