DevProg: Блог для программистов

Секреты программирования. Примеры разработки. Обзоры программёрского софта, блогов и форумов и просто полезные советы!

Ассемблер для начинающих. Урок 1 – Вызов API функций.

Опубликовано devprog на Октябрь 17, 2008

Привет. Итак приступим к делу, для этого нам нужно скачать какой-нибудь компилятор ассемблера, качайте или FASM или MASM, так как отличия в синтаксисе минимальны. Выбрать компилятор по душе можете вот сдесь. Лучше конечно скачать FASM, так как этот компилятор нравиться мне больше остальных и обьяснять я буду именно на нём.

Итак, давайте напишем приложение которое будет показывать простое окошко с какой-либо фразой, как и подобает обучаться програмированию. Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.

Создадим простой текстовый файлик и назовём его “first.asm” и начинаем программировать:

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-Фид !

Комментариев: 19 to “Ассемблер для начинающих. Урок 1 – Вызов API функций.”

  1. Pashak сказал

    Статья г….
    Разбираются всё те же сраные библиотеки, никих чистых приемов на самом ассемблере. Это, увы, притупляет профессионального программиста, но для рядового пользователя может быть полезно.
    Вывод: для нубов

  2. Rob сказал

    >> Вывод: для нубов

    Ну ты блин даёшь ))) Оракул хренов ))) Читай заголовок статьи – Ассемблер для начинающих. Во даёт ))))

  3. Kerny сказал

    О спасибо автору за статью, я тока начинаю изучать асм, и это первая статья, что прочитал!!!

  4. Дмитрий сказал

    Начинаю компилировать , выпрыгивает окошко ,как только
    несохранял . После этого сообщение об ошибке
    Error:file not found Soupce:999.ASM (1)пробовал
    повсякому.Напишите по подробней пожалуйста про настройки под windows и как компилировать и как сохранять перед этим.Кстати попадаются статьи, где
    инклуды в путях прописаны с заглавных букв.ЖДУ ОТВЕТА .

  5. Дмитрий сказал

    Все разобрался .

  6. grey сказал

    все гуд, автару респект. пиши ещё все достаточно понятно =)

  7. izverrg сказал

    Честно признаюсь, что облазил пока не весь блог, но все таки спрошу) Где можно скачать хороший (подробный) справочник по API-функциям? На данный момент главное требование – чтобы были описаны все функции, а то лучше что я смог найти – это демо-версию с 50-ю функциями и онлайн-справочники…

  8. devprog сказал

    Самая лучшая справка – это конечно MSDN (msdn.microsoft.com). У меня вот до сих пор валяется на 4 дисках за 2001 год ) Можно ещё выдрать справку (кстати очень неплохую) из продукта от Borland, весит примерно 25 метров.

  9. Spoottcal сказал

    Все-таки на самом деле нравится мне Ваш блог. Всегда очень интересно читать, включая эту тему

  10. Рабазов сказал

    Интересно было почитать, спасибо

  11. Радьков сказал

    Для Вас Местонахождение человека по номеру мобильного телефона GSM. Пеленгатор определяет местонахождение владельца сотового телефона, сотовый номер которого принадлежит одному из GSM операторов (например Билайн, Теле2, МТС, Мегафон).

  12. hopyelogess сказал

    C наступающим Вас! Пусть Ваши мечты сбудутся!

  13. C0ffe1n сказал

    Хорошо, когда можно подглядеть, как на асме тот или иной кусок кода оформить. Публикуй больше ;)

  14. TheNozza сказал

    Цитата: “Вообще я сомневаюсь что имеено так нужно учиться но не будем нарушать традиций.”
    Автор жжёт! Статья бесценна для науки!

  15. Glym сказал

    Народ у меня не получилось подскжите первый пример ошибку при компиляции выдает путь свой указал…

  16. Glym сказал

    пишет инвалид аргумент (((

  17. Lime сказал

    во во,та же проблема,когда уже прописал путь к инклуднику, пишет ошибку ,а в нижней строчке,имя файла и в квадратных скобках [1] ,вообще нуб нубом,помогите плиз =(

  18. abajentioto сказал

    Сбылась мечта миллионов поклонников Сумеречной саги, самой трогательной истории непростых взаимоотношений двух любящих сердец. Сердец девушки-человека и юноши-вампира. Объявлена официальная дата выхода финальной части фильма «Сумерки 4. Рассвет».
    «Сумерки 4. Рассвет» смотреть онлайн мы сможем уже совсем скоро, а пока стоит еще совсем немного затаить дыханье в ожидании премьеры кинофильма, а пока давайте рассмотрим, что предлагают нам создатели в качестве сюжета.[URL=”http://sumerki-4-film.ru/” – сумерки 4 дата выхода[/URL -

  19. Kikboxer сказал

    Первая программа компилируется нормально. А вот когда вторую компилирую выдает ошибку: Неверный аргумент (invalid argument). Подскажите что делать.

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.