Ассемблер для начинающих. Урок 1 – Вызов API функций.
Опубликовано devprog на Октябрь 17, 2008
Привет. Итак приступим к делу, для этого нам нужно скачать какой-нибудь компилятор ассемблера, качайте или FASM или MASM, так как отличия в синтаксисе минимальны. Выбрать компилятор по душе можете вот сдесь. Лучше конечно скачать FASM, так как этот компилятор нравиться мне больше остальных и обьяснять я буду именно на нём.
Итак, давайте напишем приложение которое будет показывать простое окошко с какой-либо фразой, как и подобает обучаться програмированию. Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.
include ‘win32ax.inc’
.code
start:
invoke ExitProcess,0 ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start
Что делает этот код? Да ничего… Если мы его скомпилируем то получим полноценную программу которая просто завершает сама себя. Компилируем:
fasm.exe first.asm
Итак, вы попытались скомпилировать… Но не получилось, а всё потому что компилятор не знает где находиться файл-инклудник – “win32ax.inc”. Необходимо ему явно указать этот файл для этого меняем код программы, например вот так:
include ‘D:\FASM\include\win32ax.inc’
.code
start:
invoke ExitProcess,0 ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start
Теперь всё скомпилируеться отлично, но чтобы это не писать каждый раз, можно задействовать переменные среды, присвоив например переменной %inc% путь “D:\FASM\include”. Но этим мы займемся в следующем туториале, так как в этом я собираюсь показать как вызываеться функция Windows API (какой и являеться ExitProcess).
Кстати invoke – это макрос, который обьявлен в инклуднике win32ax.inc. Он позволяет нам вызывать функции привычным образом как например в С++ или Delphi. Без него мы будем писать в следующих туториалах. Короче усвойте что invoke это вызов функций (но только на первый туториал, ну или на все если в будущем вы собираетесь программировать именно с его помощью).
Теперь давайте добавим в нашу программу ещё одну функцию – MessageBox:
include ‘D:\FASM\include\win32ax.inc’
.code
start:
invoke MessageBox,HWND_DESKTOP,”Hallo Xaker.Name”,”Caption”,MB_ICONASTERISK
invoke ExitProcess,0 ; вызываем функцию ExitProcess c параметром 0 (нуль)
.end start
Первый параметр функции MessageBox являеться дескриптор окна-родителя нашего окошка, в качестве него мы передаём константу HWND_DESKTOP – дескриптор Рабочего Стола.
Второй параметр – адрес на текст самого окошка. Возникает вопрос – почему же мы не пишем: invoke MessageBox,HWND_DESKTOP,offset Message….? Да потому что, макрос invoke достаточно универсален, чтобы принимать в параметре просто текст… Подробнее обьясню в следующих уроках.
Третий параметр – заголовок окна, то есть его адрес.
Ну а четвёртый параметр – стиль окна, у нас это MB_ICONASTERISK то есть окошко с восклицанием.
Кстати дополнительную информацию об API – можно получить либо на MSDN либо из любой справки Windows SDK, которая поставляеться с любым продуктом Borland. Вот и написали и разобрали вызов функций и написали полноценное приложение. Всё, до следующего туториала, всего хорошего…
———-
Интересное на блогах:
Сокращаем JavaScript код
Сервисы для программистов
———-
Полезная заметка? Есть способ получать новые посты не заходя на этот сайт! Как? Да просто подпишись на RSS-Фид
!

Pashak сказал
Статья г….
Разбираются всё те же сраные библиотеки, никих чистых приемов на самом ассемблере. Это, увы, притупляет профессионального программиста, но для рядового пользователя может быть полезно.
Вывод: для нубов
Rob сказал
>> Вывод: для нубов
Ну ты блин даёшь ))) Оракул хренов ))) Читай заголовок статьи – Ассемблер для начинающих. Во даёт ))))
Kerny сказал
О спасибо автору за статью, я тока начинаю изучать асм, и это первая статья, что прочитал!!!
Дмитрий сказал
Начинаю компилировать , выпрыгивает окошко ,как только
несохранял . После этого сообщение об ошибке
Error:file not found Soupce:999.ASM (1)пробовал
повсякому.Напишите по подробней пожалуйста про настройки под windows и как компилировать и как сохранять перед этим.Кстати попадаются статьи, где
инклуды в путях прописаны с заглавных букв.ЖДУ ОТВЕТА .
Дмитрий сказал
Все разобрался .
grey сказал
все гуд, автару респект. пиши ещё все достаточно понятно =)
izverrg сказал
Честно признаюсь, что облазил пока не весь блог, но все таки спрошу) Где можно скачать хороший (подробный) справочник по API-функциям? На данный момент главное требование – чтобы были описаны все функции, а то лучше что я смог найти – это демо-версию с 50-ю функциями и онлайн-справочники…
devprog сказал
Самая лучшая справка – это конечно MSDN (msdn.microsoft.com). У меня вот до сих пор валяется на 4 дисках за 2001 год ) Можно ещё выдрать справку (кстати очень неплохую) из продукта от Borland, весит примерно 25 метров.
Spoottcal сказал
Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему
Рабазов сказал
Интересно было почитать, спасибо
Радьков сказал
Для Вас Местонахождение человека по номеру мобильного телефона GSM. Пеленгатор определяет местонахождение владельца сотового телефона, сотовый номер которого принадлежит одному из GSM операторов (например Билайн, Теле2, МТС, Мегафон).
hopyelogess сказал
C наступающим Вас! Пусть Ваши мечты сбудутся!
C0ffe1n сказал
Хорошо, когда можно подглядеть, как на асме тот или иной кусок кода оформить. Публикуй больше ;)
TheNozza сказал
Цитата: “Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.”
Автор жжёт! Статья бесценна для науки!
Glym сказал
Народ у меня не получилось подскжите первый пример ошибку при компиляции выдает путь свой указал…
Glym сказал
пишет инвалид аргумент (((
Lime сказал
во во,та же проблема,когда уже прописал путь к инклуднику, пишет ошибку ,а в нижней строчке,имя файла и в квадратных скобках [1] ,вообще нуб нубом,помогите плиз =(
abajentioto сказал
Сбылась мечта миллионов поклонников Сумеречной саги, самой трогательной истории непростых взаимоотношений двух любящих сердец. Сердец девушки-человека и юноши-вампира. Объявлена официальная дата выхода финальной части фильма «Сумерки 4. Рассвет».
«Сумерки 4. Рассвет» смотреть онлайн мы сможем уже совсем скоро, а пока стоит еще совсем немного затаить дыханье в ожидании премьеры кинофильма, а пока давайте рассмотрим, что предлагают нам создатели в качестве сюжета.[URL=”http://sumerki-4-film.ru/” – сумерки 4 дата выхода[/URL -
Kikboxer сказал
Первая программа компилируется нормально. А вот когда вторую компилирую выдает ошибку: Неверный аргумент (invalid argument). Подскажите что делать.